Python Requests主域Cookie无法加载至子域致API访问失败求助
- 核心问题: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
相关产品推荐
相关产品推荐

