Dart-使用Cookie请求GET

raf*_*b21 5 request setcookie dart

我正在尝试获取请求,但我需要放入cookie。

使用curl可以:

curl -v --cookie "sessionid=asdasdasqqwd" <my_site>

但是下面的功能没有带来什么

import 'dart:async';
import 'package:http/http.dart' as http;
import 'package:html/parser.dart' as parser;
import 'package:html/dom.dart';

...
parseHtml() async {
   http.Response response = await http.get (
     <my_site>,
     headers: {"sessionid": "asdasdasqqwd"}
   );
   Document document = parser.parse (response.body);
   print(document.text);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将Cookie放在Dart中的get请求上?

raf*_*b21 6

补充一下答案:

import 'dart:convert';
import 'dart:io';

import 'package:html/dom.dart';
import 'package:html/parser.dart' as parser;

parseHtml() async {
  HttpClient client = new HttpClient();
  HttpClientRequest clientRequest =
      await client.getUrl(Uri.parse("http://www.example.com/"));
  clientRequest.cookies.add(Cookie("sessionid", "asdasdasqqwd"));
  HttpClientResponse clientResponse = await clientRequest.close();
  clientResponse.transform(utf8.decoder).listen((body) {
    Document document = parser.parse(body);
    print(document.text); // null

    for(Element element in document.getElementsByClassName('your_class')) {
      ...
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

上面的代码运行得很好,下面的代码也运行得很好:

parseHtml() async {
  http.Response response = await http.get(
    'http://www.example.com/',
    headers: {'Cookie': 'sessionid=asdasdasqqwd'}
  );
  Document document = parser.parse(response.body);
  print(document.text); // null

  for(Element element in document.getElementsByClassName('your_class')) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*hen 5

您可以使用该http.get(Url, Headers Map)函数并在标头映射中手动创建 cookie,但使用以下命令更容易发出包含 cookie 的请求HttpClient

import 'dart:convert';
import 'dart:io';

import 'package:html/dom.dart';
import 'package:html/parser.dart' as parser;

parseHtml() async {
  HttpClient client = new HttpClient();
  HttpClientRequest clientRequest =
      await client.getUrl(Uri.parse("http: //www.example.com/"));
  clientRequest.cookies.add(Cookie("sessionid", "asdasdasqqwd"));
  HttpClientResponse clientResponse = await clientRequest.close();
  clientResponse.transform(utf8.decoder).listen((body) {
    Document document = parser.parse(body);
    print(document.text);
  });
}
Run Code Online (Sandbox Code Playgroud)