这篇文章中的回答解释的比较清楚
https://stackoverflow.com/questions/53032456/login-with-python-requests-and-csrf-token
基本思路是:
- 先通过get请求,获取到cookies
- 将cookies更新到requests的session中的headers
- 使用session发起登录认证请求
- 更新session中的headers的cookies
- 第4步完成后,后续的接口请求中的headers一般就不需要更新了。
网站这种设计,感觉是为了防爬虫的,但是感觉效果不太。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
s = requests.Session()
base_url = "http://ip:port"
s.get(base_url) # 获取cookies
s.headers.update({
'content-type': "application/x-www-form-urlencoded; charset=UTF-8",
'x-csrftoken': s.cookies['csrftoken']
})
payload = "username=admin&password=123456"
rp = s.post(url = base_url + '/authenticate/', data=payload)
print(rp.text)
s.headers.update({'x-csrftoken': s.cookies['csrftoken']})
payload = "your_payload"
rp = s.post(url = base_url + '/query/', data=payload)
print(rp.text)