【发布时间】:2015-07-04 08:30:31
【问题描述】:
我遇到了简单授权和上传 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。
授权是 100% 好的(页面上有一个注销链接)。 后来,我尝试使用授权的会话 cookie 上传数据:
r = requests.post(url, files = files, data = formData, headers = self.headers, cookies = self.cookies)
但网站拒绝了该请求。如果我们比较来自脚本和谷歌浏览器(使用 Wireshark)的请求,请求正文没有差异。
唯一的区别是请求类发送 2 cookie,而谷歌浏览器发送 7。
更新:仔细检查,第一个请求收到 7 个 cookie。 post 方法只是忽略一半...
【问题讨论】:
-
我不知道
requests有任何cookie 问题,没有。使用 Chrome 隐身标签时,对网站的第一个请求设置了多少个 cookie?该站点可以很好地根据用户代理或其他请求标头改变行为。接下来,您确定该页面没有使用登录表单中嵌入的 CSRF 令牌吗? -
接下来,cookie 的有效期是什么时候?这些 cookie 上是否设置了特定标志?当您使用
requests.Session()对象来管理 cookie 时会发生什么? -
@MartijnPieters 我的错,我已经解决了错误。我没有使用
session类的经验,对未来的好建议!
标签: python python-3.x cookies python-requests multipartform-data