我有一个简单的授权和上传API脚本的问题。
当授权成功后,客户端会收到几个cookie,其中包括PHPSESSID cookie(在浏览器中)。
我使用表单数据和requests.post
方法进行授权:
r = requests.post(url, headers = self.headers, data = formData)
self.cookies = requests.utils.dict_from_cookieja(r.cookies)
头部信息仅用于自定义User-Agent
。
授权是完全没问题的(页面上有一个注销链接)。 稍后,我尝试使用已授权的会话Cookie上传数据:
r = requests.post(url, files = files, data = formData, headers = self.headers, cookies = self.cookies)
但是网站拒绝请求。如果我们使用Wireshark比较脚本和Google Chrome的请求,请求体中没有任何区别。
唯一的区别是请求类发送2个cookie,而Google Chrome发送7个cookie。
更新:再次确认,第一个请求接收到了7个cookie。post方法只忽略了其中一半...
requests
存在任何cookie问题。使用Chrome的无痕标签,第一次请求该网站时设置了多少个cookie?该网站可能会根据用户代理或其他请求头更改行为。接下来,您确定该页面没有在登录表单中嵌入CSRF令牌吗? - Martijn Pietersrequests.Session()
对象来管理这些 cookie 时会发生什么? - Martijn Pieters