Python requests无法正确发送Cookie?如何实现正确请求
可能的原因及修复步骤
1. 确认Cookie完整性,使用完整Cookie字符串传递
你用httpie能成功,说明Cookie本身有效,但可能你只传递了NYT-S一个字段,而httpie实际发送了多个Cookie。先通过http -v命令查看httpie发送的完整请求头:
http -v GET https://www.nytimes.com/svc/crosswords/v3/undefined/puzzles.json date_start==2024-01-01 date_end==2024-01-26 Cookie:NYT-S=<你的Cookie值>
找到输出中Cookie:开头的行,把整个字符串复制到requests的headers里:
nyt_stat_url = 'https://www.nytimes.com/svc/crosswords/v3/undefined/puzzles.json' params = { 'date_start': '2024-01-01', 'date_end': '2024-01-26' } headers = { 'Cookie': 'NYT-S=<你的完整Cookie值>; 其他可能的Cookie字段=对应值', # 替换成httpie里的完整Cookie字符串 'User-Agent': 'HTTPie/3.2.2' # 同步httpie的User-Agent } response = requests.get(nyt_stat_url, headers=headers, params=params)
2. 使用RequestsCookieJar构建Cookie(更可靠)
如果拆分Cookie字段,用RequestsCookieJar比字典更能保证Cookie的domain和path正确性:
import requests nyt_stat_url = 'https://www.nytimes.com/svc/crosswords/v3/undefined/puzzles.json' params = { 'date_start': '2024-01-01', 'date_end': '2024-01-26' } cookie_jar = requests.cookies.RequestsCookieJar() # 逐个添加Cookie字段,确保domain和path正确 cookie_jar.set('NYT-S', '<你的实际Cookie值>', domain='.nytimes.com', path='/') # 如果有其他Cookie字段,同样添加 # cookie_jar.set('other-cookie', 'value', domain='.nytimes.com', path='/') headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } response = requests.get(nyt_stat_url, cookies=cookie_jar, headers=headers, params=params)
3. 检查请求头差异
NYT的接口可能校验User-Agent等请求头,requests默认的User-Agent是python-requests/x.x.x,容易被识别拦截。直接复用httpie或浏览器的User-Agent能解决这类问题。
4. 关闭自动重定向排查
如果请求被重定向,可能Cookie在重定向过程中丢失。可以关闭自动重定向,查看响应状态和位置:
response = requests.get(nyt_stat_url, cookies=cookies, params=params, allow_redirects=False) print(response.status_code, response.headers.get('Location'))
如果确实是重定向问题,需要手动处理重定向时携带Cookie。
内容的提问来源于stack exchange,提问作者user23305082
相关产品推荐
相关产品推荐

