Cro*_*oll 5 python cookies multipartform-data python-3.x python-requests
我有简单授权和上传API脚本的问题.
授权后,客户端会收到几个cookie,包括PHPSESSID cookie(在浏览器中).
我使用requests.post表单数据的方法进行授权:
r = requests.post(url, headers = self.headers, data = formData)
self.cookies = requests.utils.dict_from_cookieja(r.cookies)
Run Code Online (Sandbox Code Playgroud)
标题仅用于自定义User-Agent.
授权是100%罚款(页面上有一个注销链接).稍后,我尝试使用授权会话cookie上传数据:
r = requests.post(url, files = files, data = formData, headers = self.headers, cookies = self.cookies)
Run Code Online (Sandbox Code Playgroud)
但网站拒绝了该请求.如果我们比较来自脚本和谷歌浏览器的请求(使用Wireshark),请求正文中没有差异.
唯一的区别是请求类发送的2个 cookie,而谷歌Chrome发送7个.
更新:双重检查,第一个请求收到7个cookie.post方法只是忽略了一半......
我在代码中的错误是我将每个下一个 API 请求中的 cookie分配给会话 cookie 字典。在登录后的每个请求中,cookie 都会被即将到来的响应 cookie '重置',这就是问题所在。由于身份验证 cookie 仅在登录请求时分配,因此它们会在下一个请求时丢失。
在每个授权请求之后,我使用update(),而不是分配。
self.cookies.update( requests.utils.dict_from_cookiejar(r.cookies) )
Run Code Online (Sandbox Code Playgroud)
解决了我的问题,上传工作正常!