如何从 header 获取 Flutter Web 中的 cookie?
How to get a cookie in Flutter Web from header?
Flutter Web 应用程序发送 HTTP REST API POST 请求并返回 JSON 响应和 Set-Cookie header 中的 cookie 作为如下。
(Flutter(频道测试版,1.22.0,在 Microsoft Windows 上)
提取 cookie 时,响应似乎没有找到 header 值。调用和提取码为:
var response = await http.post(url, headers: {"Content-Type": "application/json"}, body: jsonEncode(data));
if (response.statusCode == 200) {
var cookie = response.headers['set-cookie'];
print('cookie: $cookie');
}
控制台结果是:
cookie: null
服务器端在 Docker 容器中的 ASPNet.Core 3.1 上运行,但这应该不是问题,因为 cookie 位于 header 中。那么,如何在 Flutter Web 中提取它呢?
实际上,我的最终目标是将 cookie 与其他所有请求一起发回。但它似乎不会在浏览器中自动发生。因此,如果有人能指出处理这种情况的正确方法,这也是一个很好的解决方案。
感谢任何帮助。谢谢
一个月前有人问过这个问题,但我的回答可能对其他人有帮助。
Flutter Web 中的 Cookie 由浏览器管理 - 它们会自动添加到请求中(添加到 Cookie header),如果 cookie 之前是由 Set-Cookie 设置的 - 更准确地说,当您执行 [=32] 时它会正常工作=]发布版本。
就我而言,它在开发构建期间不起作用。我的解决方案:
在服务器上设置 headers:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:61656
//端口号可能不同
扑朔迷离:
class 成员:
final http.Client _client = http.Client();
// 例子
Future<String> getTestString() async {
if (_client is BrowserClient)
(_client as BrowserClient).withCredentials = true;
await _client.get('https://localhost/api/login');
await _client.get('https://localhost/api/login');
return 'blah';
}
http.Client() 如果 dart:io 可用则创建一个 IOClient,如果 dart:io 可用则创建一个 BrowserClient
dart:html 可用 - 在 Flutter Web 中 dart:html 可用。
将 withCredentials 设置为 true 使 cookie 工作。
运行 您的应用:
flutter run -d chrome --web-port=61656
// 与服务器相同的端口号
请记住,在 Flutter Web 中,网络请求是通过浏览器 XMLHttpRequest 发出的。
Flutter Web 应用程序发送 HTTP REST API POST 请求并返回 JSON 响应和 Set-Cookie header 中的 cookie 作为如下。
(Flutter(频道测试版,1.22.0,在 Microsoft Windows 上)
提取 cookie 时,响应似乎没有找到 header 值。调用和提取码为:
var response = await http.post(url, headers: {"Content-Type": "application/json"}, body: jsonEncode(data));
if (response.statusCode == 200) {
var cookie = response.headers['set-cookie'];
print('cookie: $cookie');
}
控制台结果是:
cookie: null
服务器端在 Docker 容器中的 ASPNet.Core 3.1 上运行,但这应该不是问题,因为 cookie 位于 header 中。那么,如何在 Flutter Web 中提取它呢?
实际上,我的最终目标是将 cookie 与其他所有请求一起发回。但它似乎不会在浏览器中自动发生。因此,如果有人能指出处理这种情况的正确方法,这也是一个很好的解决方案。
感谢任何帮助。谢谢
一个月前有人问过这个问题,但我的回答可能对其他人有帮助。 Flutter Web 中的 Cookie 由浏览器管理 - 它们会自动添加到请求中(添加到 Cookie header),如果 cookie 之前是由 Set-Cookie 设置的 - 更准确地说,当您执行 [=32] 时它会正常工作=]发布版本。 就我而言,它在开发构建期间不起作用。我的解决方案:
在服务器上设置 headers:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost:61656
//端口号可能不同
扑朔迷离: class 成员:
final http.Client _client = http.Client();
// 例子
Future<String> getTestString() async {
if (_client is BrowserClient)
(_client as BrowserClient).withCredentials = true;
await _client.get('https://localhost/api/login');
await _client.get('https://localhost/api/login');
return 'blah';
}
http.Client() 如果 dart:io 可用则创建一个 IOClient,如果 dart:io 可用则创建一个 BrowserClient dart:html 可用 - 在 Flutter Web 中 dart:html 可用。 将 withCredentials 设置为 true 使 cookie 工作。
运行 您的应用:
flutter run -d chrome --web-port=61656
// 与服务器相同的端口号
请记住,在 Flutter Web 中,网络请求是通过浏览器 XMLHttpRequest 发出的。