我目前正在使用 Python 请求,并且需要 CSRF 令牌才能登录站点。根据我的理解 requests.Session() 获取 cookie,但显然我需要令牌。我还想知道将它放在我的代码中的哪里。
导入请求
user_name = input('Username:')
payload = {
'username': 'user_name',
'password': 'randompass123'
}
with requests.Session() as s:
p = s.post('https://examplenotarealpage.com', data=payload)
请参阅以下代码示例。您可以直接使用它登录仅使用cookie存储登录信息的网站。
import requests
LOGIN_URL = 'https://examplenotarealpage.com'
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
response = requests.get(LOGIN_URL, headers=headers, verify=False)
headers['cookie'] = '; '.join([x.name + '=' + x.value for x in response.cookies])
headers['content-type'] = 'application/x-www-form-urlencoded'
payload = {
'username': 'user_name',
'password': 'randompass123'
}
response = requests.post(LOGIN_URL, data=payload, headers=headers, verify=False)
headers['cookie'] = '; '.join([x.name + '=' + x.value for x in response.cookies])
有几个可能的位置CSRF
令牌。不同的网站使用不同的方式将其传递给浏览器。这里是其中的一些:
- 它可以带有响应标头,在这种情况下获取它很容易。
-
有时页面元包含 CSRF 令牌。你必须解析页面的html内容才能得到它。找到适合它的 CSS 选择器。看一个例子:
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'lxml')
csrf_token = soup.select_one('meta[name="csrf-token"]')['content']
它可以位于带有 JavaScript 代码的脚本标记内。获得它会很棘手。但是,您始终可以使用regex https://docs.python.org/3/library/re.html来隔离它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)