Python requests复用POST获取的Cookie发起GET请求API鉴权失败
问题原因
你的代码有3个核心错误导致Cookie携带失败:
- 初始化了
requests.Session()会话对象但从未使用,这个对象本身会自动在同会话的所有请求中持久化、复用Cookie,完全不需要手动解析提取。 - 手动字符串切割Cookie的方式容错率极低,很容易出现格式问题,且你自定义请求头时将Cookie对应的头字段错写为复数
Cookies,HTTP标准中携带Cookie的请求头名为单数Cookie,服务端无法识别你传入的内容。 - 第二次GET请求直接调用原生
requests.request方法,和之前的登录请求完全没有上下文关联,就算Cookie格式正确也无法自动关联登录状态。
修正后可直接运行的代码
import requests # 初始化会话实例,同实例发起的所有请求会自动保留、复用Cookie s = requests.Session() # 替换为你自己的有效token your_token = "xxxxxx" # 登录接口请求 login_resp = s.post(f"https://api.ommasign.com/v1/users/apikey/login?token={your_token}") print("登录接口返回:", login_resp.json()) # 后续查询请求直接用同一会话实例发起,无需手动传递Cookie device_resp = s.get(f"https://api.ommasign.com/v1/devices?token={your_token}&status=offline") result = device_resp.json() print("设备查询结果:", result) print("执行完成")
额外注意事项
- 非必要不要手动解析Cookie:如果遇到特殊场景需要手动传递Cookie,直接调用响应对象的
cookies.get_dict()方法拿到标准Cookie键值对,传入后续请求的cookies参数即可,不要自行通过字符串切割处理RequestsCookieJar对象。 - 同域名下需要保留登录状态的连续请求,全程使用同一个
Session实例发起即可,不需要手动处理Cookie、同源请求头等逻辑,requests会自动完成适配。
内容的提问来源于stack exchange,提问作者Mrcheat62055
相关产品推荐
相关产品推荐

