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

Flutter中如何在HTTP请求中传递Cookie?

问题

我想要访问Instagram私有API,该API要求用户登录后才能发送请求。为此,我借助flutter_web_view和webview_cookie_manager获取Cookie或会话ID(即让用户通过WebView登录,再使用cookie_manager包获取Cookie)。但不知道如何将这些Cookie传入HTTP请求中?

// 获取cookie或会话ID
WebViewController webViewController = WebViewController()
  ..loadRequest(Uri.parse('https://www.instagram.com/'))
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..setNavigationDelegate(
    NavigationDelegate(
      onPageFinished: (value) async {
        final cookieManager = WebviewCookieManager();
        List<Cookie> gotCookies = await cookieManager.getCookies('https://www.instagram.com/');
        print(gotCookies); // 已获取到cookies
      }
    )
  );

var response = await http.get(private_api_url); // 如何在此请求中传入cookies
解决方案

要把获取到的Cookie传入HTTP请求,只需两步操作:

  1. 转换Cookie格式:将List<Cookie>转换成HTTP标准的Cookie字符串——把每个Cookie的name和value拼接成name=value,多个Cookie用; 分隔。
  2. 添加到请求头:在http.get的headers参数中加入Cookie字段,值为转换后的字符串。

修改后的完整代码示例:

// 获取cookie或会话ID
WebViewController webViewController = WebViewController()
  ..loadRequest(Uri.parse('https://www.instagram.com/'))
  ..setJavaScriptMode(JavaScriptMode.unrestricted)
  ..setNavigationDelegate(
    NavigationDelegate(
      onPageFinished: (value) async {
        final cookieManager = WebviewCookieManager();
        List<Cookie> gotCookies = await cookieManager.getCookies('https://www.instagram.com/');
        
        // 转换Cookie为HTTP请求所需格式
        String cookieString = gotCookies.map((cookie) => '${cookie.name}=${cookie.value}').join('; ');
        
        // 携带Cookie发送私有API请求
        var response = await http.get(
          Uri.parse(private_api_url),
          headers: {
            'Cookie': cookieString,
            // 建议保留和WebView一致的User-Agent,避免被服务端拦截
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
          }
        );
        
        print(response.body);
      }
    )
  );

额外注意

  • 确保私有API的域名在Cookie的domain允许范围内,否则服务端会忽略这些Cookie。
  • 无需手动处理HttpOnly标记的Cookie,webview_cookie_manager已自动包含这类Cookie,直接拼接即可。

内容的提问来源于stack exchange,提问作者shakti goyal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:33:22