【问题标题】:Can't Access Cookie in HTTP Response with Flutter无法使用 Flutter 访问 HTTP 响应中的 Cookie
【发布时间】:2020-02-11 04:58:24
【问题描述】:

我正在开发 Flutter 应用程序,该应用程序将使用基于 Express 的 REST api。在实现基于 Cookie 的会话时,我想使用基本身份验证请求从应用程序中检索 cookie,但不知何故我无法检索 cookie 作为响应。当我从 Postman 发出相同的请求时,没有问题,cookie 是自动设置的。

我正在使用 HTTP 包发出请求,代码非常简单,如下所示。

void login(String username, String password) async {
var url = 'http://$username:$password@111.222.333.444:3333/auth';
var response = await http.get(url);
print('Response header: ${response.headers}');
print('Response status: ${response.statusCode}');
print('Response body: ${response.body}');
}

响应的标头或正文中没有 cookie。

【问题讨论】:

标签: http cookies flutter dart


【解决方案1】:

你必须在标题中调用'set-cookie':

var cookies = response.headers['set-cookie'];

【讨论】:

  • 不起作用。响应标头根本没有 set-cookie 的值,即使它可以在 Chrome 的网络日志中看到。
  • 同意。在 Flutter Web 中尝试了 dio 和 http 包。标题中没有 set-cookie 显示。但在 android 和 postman 中,set-cookie 就会出现。
  • @RohanTaneja 这看起来像是颤振中的错误。我确认在开发控制台的网络选项卡中,set-cookie 是可见的,但在 Flutter Web 中的 dart 代码中的输出不包括它。诡异的。已经尝试了 3 个库:dio、http 和默认的 HttpClient。结果相同。
  • @chitgoks 有什么解决办法吗?我也可以在浏览器中看到我的 cookie,但是当我在颤振控制台中打印标题时,它没有显示 cookie
【解决方案2】:

http package get 和 post 操作正在发送不带 cookie 的请求,因此您应该像这样手动放置 cookie:

Response response = await get(url, headers: {'cookie': 'session_id=ufe1nfq69mdi67pnql6n1cs3cv; path=/; HttpOnly='});

但是有一种简单的方法可以做到这一点,而无需 requests package 手动放置 cookie

import 'package:requests/requests.dart';
// ...

// For example post some login request
  var url = "http://yourApilink";
  var body = Map<String, dynamic>();
  body["username"] = username;
  body["password"] = password;
  var request = await Requests.post(url, body: body);
  request.raiseForStatus();
  if(request.statusCode==200) {
    //Successful
    var statusJson = json.decode(utf8.decode(request.bytes()));
//....

// Example for get some other actions
  var url = "http://yourApilink";
  var request = await Requests.get(url);
  request.raiseForStatus();
  print(request.json()['userid']);
  if(request.statusCode==200) {
    //Successful
    var statusJson = json.decode(utf8.decode(request.bytes()));
//....

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 2020-03-26
    • 2014-02-26
    • 2018-01-03
    • 1970-01-01
    • 2017-01-26
    • 2021-10-19
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多