Flutter中用Dio实现Cookie设置、GET请求及获取方案咨询
你代码的问题所在
- Cookie请求头格式错误:直接将
Map赋值给Cookie请求头是无效的,HTTP的Cookie头要求格式为key1=value1; key2=value2的字符串,而非Map结构。 - Cookie管理逻辑冲突:同时手动设置
Cookie头和使用CookieManager拦截器会导致冲突——CookieManager会自动处理Cookie的存储与发送,手动设置头会干扰它的正常工作。
正确实现步骤
1. 添加依赖
在pubspec.yaml中引入所需包:
dependencies: dio: ^5.4.0+1 cookie_jar: ^4.0.1 dio_cookie_manager: ^2.0.0
2. 初始化Dio与Cookie管理器
统一通过CookieJar管理Cookie,避免手动操作请求头:
import 'package:dio/dio.dart'; import 'package:cookie_jar/cookie_jar.dart'; import 'package:dio_cookie_manager/dio_cookie_manager.dart'; // 初始化Dio实例和Cookie管理器 final dio = Dio(BaseOptions(baseUrl: 'https://google.com/')); final cookieJar = CookieJar(); dio.interceptors.add(CookieManager(cookieJar));
3. 添加自定义Cookie并发送GET请求
通过CookieJar添加要发送的Cookie,它会自动在请求时带上这些Cookie:
final targetUri = Uri.parse('https://google.com/'); // 向CookieJar添加自定义Cookie await cookieJar.saveFromResponse(targetUri, [ Cookie('status', 'working'), Cookie('color', 'blue'), ]); // 发送GET请求 final response = await dio.get('/');
4. 获取响应中的Cookie
请求完成后,从CookieJar中读取目标域名下的所有Cookie:
// 加载目标域名的Cookie列表 List<Cookie> responseCookies = await cookieJar.loadForRequest(targetUri); // 转换为Map格式便于查看 Map<String, String> cookieMap = { for (var cookie in responseCookies) cookie.name: cookie.value }; print(cookieMap);
内容的提问来源于stack exchange,提问作者thibd
相关产品推荐
相关产品推荐

