使用python请求传递csrftoken使用隐藏的输入类型

时间:2014-08-04 22:07:12

标签: python cookies

我有像这样的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 :(得分: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的隐藏输入因为我无法看到令牌的值存储在何处以及如何存储,这是我可以带你去的。

答案 1 :(得分: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>