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

Python Requests主域Cookie无法加载至子域致API访问失败求助

解决requests访问子域API时主域Cookie不传递的问题
  • 核心问题:requests的CookieJar域匹配规则和浏览器不同,浏览器会自动将主域Cookie传递给子域,但requests默认仅严格匹配完全一致的域,导致主域website.com的Cookie不会被带到子域premium.website.com的请求中。

方案1:手动构造Cookie并指定正确的域属性

直接创建Cookie对象时,将主域Cookie的domain设为.website.com(注意前置点),这样子域就能匹配到该Cookie。示例代码:

import requests
from http.cookiejar import Cookie

session = requests.Session()

# 添加主域的refresh_token和access_token,domain设为.website.com
for cookie_name, cookie_value in [
    ('refresh_token', '你的refresh_token值'),
    ('access_token', '你的access_token值')
]:
    session.cookies.set_cookie(Cookie(
        name=cookie_name,
        value=cookie_value,
        domain='.website.com',
        path='/',
        secure=True,  # 若API是HTTPS请求,需设为True
        httponly=True  # 若浏览器中该Cookie标记为HttpOnly,需同步设置
    ))

# 添加子域的premium_key
session.cookies.set_cookie(Cookie(
    name='premium_key',
    value='你的premium_key值',
    domain='premium.website.com',
    path='/',
    secure=True,
    httponly=True
))

# 发起请求
response = session.get('https://premium.website.com/api/v1/endpoint')
print(response.text)

方案2:从浏览器导出Cookie直接导入

使用浏览器插件(如EditThisCookie)将Cookie导出为Netscape格式的cookies.txt,再通过MozillaCookieJar导入到session中,这样能完全保留浏览器的Cookie域规则:

import requests
from http.cookiejar import MozillaCookieJar

session = requests.Session()
# 加载导出的Cookie文件
session.cookies = MozillaCookieJar('cookies.txt')
session.cookies.load(ignore_discard=True, ignore_expires=True)

# 发起请求
response = session.get('https://premium.website.com/api/v1/endpoint')
print(response.text)
  • 注意事项:导出Cookie时要确保包含所有三个Cookie,且导出格式为Netscape(不是JSON);若Cookie有过期时间,可通过ignore_expires=True忽略过期检查。

内容的提问来源于stack exchange,提问作者Abhi Agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:23:25