为何在iMac上使用Python Requests始终返回401状态码?
这种跨系统的Cookie兼容性问题我之前也踩过坑,大概率是Cookie的格式处理或者系统/浏览器间的细节差异导致的,咱们一步步来排查解决:
1. 先修正Cookie的格式转换(最可能的原因)
你现在的脚本里直接把Selenium返回的Cookie列表序列化存成了JSON,但requests.get()的cookies参数需要的是键值对形式的字典({cookie名称: cookie值}),而不是Selenium返回的那种包含name、value、domain等字段的列表。
虽然Windows上可能因为某种兼容巧合成功了,但iMac上的requests版本或环境对格式要求更严格。你需要把读取后的Cookie列表转换成正确的字典格式:
import json import requests # 读取Cookie文件 with open('cookies.json', 'r', encoding='utf-8') as f1: listCookies = json.load(f1) # 转换成requests需要的键值对格式 cookies_dict = {cookie['name']: cookie['value'] for cookie in listCookies} # 发起请求 response = requests.get(url, cookies=cookies_dict) print(response.status_code)
2. 检查Cookie的属性差异
Windows和iMac上的浏览器(比如你可能Windows用Chrome,iMac用Safari)对Cookie的处理可能有差异,比如:
- Domain属性:如果Cookie的
domain字段是.your-site.com,但你请求的URL是your-site.com(不带前缀),iMac上的requests可能严格匹配域名,导致Cookie不生效。 - SameSite属性:部分网站会设置
SameSite=Strict,如果你的请求不是从同源页面发起,iMac上的浏览器或requests会拒绝携带Cookie。你可以尝试在转换Cookie时添加/修改SameSite字段为None(注意需要配合secure=True)。 - Secure属性:如果Cookie标记了
secure=True,那只有HTTPS请求才会携带它。检查你在iMac上的请求URL是否是HTTPS,有没有不小心用了HTTP。
3. 验证环境版本一致性
- 对比Windows和iMac上的
requests版本,不同版本对Cookie的处理逻辑可能有差异,建议两边都升级到最新版:pip install --upgrade requests。 - 检查Selenium和浏览器版本,比如iMac上的SafariDriver是否和Safari版本匹配,这可能影响Cookie的获取完整性。
4. 手动验证Cookie有效性
如果上面的方法都不行,你可以在iMac上手动登录网站,从浏览器开发者工具的「Application」标签里复制完整的Cookie字符串,然后用headers方式发起请求:
headers = { 'Cookie': '这里粘贴从浏览器复制的Cookie字符串' } response = requests.get(url, headers=headers)
如果这样能返回200,说明问题出在Selenium获取或转换Cookie的环节,再针对性调整脚本。
内容的提问来源于stack exchange,提问作者cindy
相关产品推荐
相关产品推荐

