python实现需要csrf-token的登录认证

Posted by Tesla9527 on April 8, 2022

这篇文章中的回答解释的比较清楚

https://stackoverflow.com/questions/53032456/login-with-python-requests-and-csrf-token

基本思路是:

  1. 先通过get请求,获取到cookies
  2. 将cookies更新到requests的session中的headers
  3. 使用session发起登录认证请求
  4. 更新session中的headers的cookies
  5. 第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)