我想向远程服务器发出http请求,同时正确处理cookie(例如,存储服务器发送的cookie,并在我发出后续请求时发送这些cookie)。
对于我正在使用的HTTP请求
static Future<Map> postData(Map data) async {
http.Response res = await http.post(url, body: data); // post api call
Map data = JSON.decode(res.body);
return data;
}
8条答案
按热度按时间fcy6dtqo1#
下面是一个如何获取会话cookie并在后续请求中返回它的示例。您可以轻松地修改它以返回多个cookie。创建一个
Session
类并通过它路由所有GET
和POST
。bd1hkmkf2#
我改进了Richard Heap的解决方案,使其能够处理多个“Set-cookie”和多个cookie。
在我的例子中,服务器返回多个'Set-cookie'。http包将所有set-cookie头部连接在一个头部中,并用逗号(',')分隔。
oknrviil3#
我已经发布了一个名为requests的小flutter库来帮助处理cookie-aware http请求。
使用方法:
了解更多关于requests
4smxwvx54#
我把larly's answer迁移到了nullsafety。还添加了'put'函数。
piwo6bdm5#
如果没有问题,我会使用dio和cookiejar。
只需在
pubspec.yaml
中添加以下依赖项:这里有一个使用它的例子。确保你运行它作为一个flutter脚本,而不是dart脚本。
示例输出:
mlnl4t2r6#
我发现最好的解决方案来处理cookie的重定向也
ars1skjm7#
如果你需要一个格式,那么它就是
可以通过调用cookie访问1,2,3
a0zr77ik8#
根据您使用Flutter Web或移动的设备的情况,有不同的方式来获取Cookie
对于Flutter Web,您只需:
您的浏览器将完成这项工作并自动重新发送您的Cookie。
你可以定义一个特定的端口时,午餐的应用程序与此命令-“flutter运行-d chrome --web-port 5555”
但对于移动的你必须使一些技巧
我使用Dio包来轻松定义onResponse/onRequest函数和条件导入,以避免编译失败。(不幸的是,withCredentials选项仅在Web上可用)
如果要使用默认的http类
您只需创建自己的onResponse/onRequest函数
NetworkConfig.dart
get_network_config.dart
web_network_config.dart
移动的网络配置.dart
localData是flutter_secure_storage的 Package 器(在本地保存cookie)
如果使用默认的Client()类,还可以像这样设置凭据