You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中用Dio实现Cookie设置、GET请求及获取方案咨询

Flutter中设置请求Cookie并获取响应Cookie的正确实现

你代码的问题所在

  1. Cookie请求头格式错误:直接将Map赋值给Cookie请求头是无效的,HTTP的Cookie头要求格式为key1=value1; key2=value2的字符串,而非Map结构。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 11:24:11