使用隐藏输入域在Python Requests中传递csrftoken
我有一段这样的Python代码
s=requests.Session()
headers = {'User-Agent': 'Mozilla/5.0'}
URL = 'http://test.dev/api/login'
s.get(URL)
csrftoken = s.cookies['csrf']
print csrftoken
login_data = dict(username='test', password='testtest', _token=csrftoken)
ra=s.post(URL, data=login_data, headers = headers)
print ra.request.headers
但是我不想从cookie中找到csrftoken = s.cookies['csrf'],那么我该怎么做呢?
<input type="hidden" name="csrf">
还有,在用csrftoken请求的时候,是否需要在头信息中加上Referer=URL,还是说这只是某些网站的要求?
谢谢。
2 个回答
0
非常感谢你,Moe Jan。
我一开始试了你的代码,但没有获取到值。
csrf = soup.find(name="csrf")
于是我去查找了bs4这个库,并使用了
csrf = soup.find("input", value=True)["value"]
结果成功获取到了值。
我的表单是这样的:
<form accept-charset="UTF-8" action="http://test.dev/api/login" method="POST">
<input name="_token" type="hidden" value="8z0dMEpVq8jH0VY5zgh8xFhcrQaurz">
</input>
</form>
4
我建议你试试用BeautifulSoup这个工具。
from bs4 import BeautifulSoup
s=requests.Session()
headers = {'User-Agent': 'Mozilla/5.0'}
URL = 'http://test.dev/api/login'
s.get(URL)
soup = BeautifulSoup(s.get(URL).text)
csrf = soup.find(name="csrf")
这个工具可以提取出隐藏的输入框,其中保存了csrf_token
。因为我看不到这个token的值是怎么存储的,所以我只能帮你到这里。