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) )
解决了我的问题,上传正常!
我在简单授权和上传 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) )
解决了我的问题,上传正常!