使用隐藏输入域在Python Requests中传递csrftoken

1 投票
2 回答
4271 浏览
提问于 2025-04-18 16:00

我有一段这样的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的值是怎么存储的,所以我只能帮你到这里。

撰写回答