python 的请求没有正确处理 cookie?

python's requests do not handle cookies correctly?

我在简单授权和上传 API 脚本时遇到问题。

授权后,客户端会收到多个 cookie,包括 PHPSESSID cookie(在浏览器中)。

我使用 requests.post 方法和表单数据进行授权:

r = requests.post(url, headers = self.headers, data = formData)
self.cookies = requests.utils.dict_from_cookieja(r.cookies)

Headers 仅用于自定义 User-Agent

授权 100% 没问题(页面上有注销 link)。 稍后,我尝试使用授权的 session cookies 上传数据:

r = requests.post(url, files = files, data = formData, headers = self.headers, cookies = self.cookies)

但是网站拒绝了请求。如果我们比较脚本和 google chrome(使用 Wireshark)的请求,请求 body.

没有区别

唯一不同的是 2 cookie 由请求 class 发送,而 google chrome 发送 7.

更新:仔细检查,第一个请求收到 7 个 cookie。 post方法只忽略一半...

我在代码中的错误是我分配 来自每个下一个 API 请求的 cookie 到会话 cookie 字典。在登录后的每个请求中,即将到来的响应 cookie 都会 'reset' cookie,这就是问题所在。由于身份验证 cookie 仅在登录请求时分配,因此在下一次请求时它们会丢失。

在每次授权请求后,我使用 update(),而不是分配。

self.cookies.update( requests.utils.dict_from_cookiejar(r.cookies) )

解决了我的问题,上传正常!