【发布时间】:2018-06-03 15:47:02
【问题描述】:
我有一个试图获取 cookie 的网络机器人。 流程如下: 我去获取验证码和 csrftoken(cookie) 我解决验证码并将解决方案发送到服务器。 他们发回会话 ID。
会话 id 是一个响应 cookie;虽然我似乎没有在 python 中得到它。
对服务器的POST 请求如下所示:
cookies={'csrftoken': 'h1239phtluwrane',}
headers = {'foo': 'bar'}
session=requests.Session()
r=session.post(URL, headers=headers, data=data, cookies=cookies)
try:
cookies['sessionid']=session.cookies['sessionid']
except KeyError:
print("Error getting correct cookie. %s" %session.cookies)
然后在session.cookies 中只有csrftoken 作为请求cookie....但是找不到响应cookie。
在另一个注意事项上。这个完全相同的代码曾经可以工作,但即使我没有编辑它也突然停止工作。我验证了服务器方法没有改变。
【问题讨论】:
-
如何获取 CSRF 令牌?难道它每次都在变化,你需要考虑到这一点吗?
r.status_code的值是多少?谢谢。 -
status_code正在返回200并且 CSRF 令牌确实发生了变化,我有一个搜索功能来获取这些,我已经确认它们正在工作。 TBH 我之前遇到过上述问题,解决它的方法是使用session而不是仅检查POST中的 cookie。 -
好的,谢谢。您是否尝试在发布请求之前先将
session.get()设为URL? -
不,但这听起来很有趣。你的理由是什么?
-
您可以通过
session.get()获得新鲜饼干 - 即。新的会话 ID。此外,如果脚本的行为更像人类,那么服务器就无法识别脚本/机器人并阻止它。人类大多是第一次打开主页,从不将POST作为第一个请求。
标签: python session cookies request