首页 > 解决方案 > 使用 CSRF 的 Python 请求会话

问题描述

所以我有两段代码。这个有效:

import requests

url = 'http://XXXXXX.com.au?xxxxx'
r = requests.get(url,auth = ('user', 'password'), headers = {'X-CSRF-TOKEN': 'Fetch'})
token = r.headers['x-csrf-token']
c = requests.utils.dict_from_cookiejar(r.cookies)

reqData = {'param' : 'value'}
headers = {'X-CSRF-TOKEN': token}
r = requests.post(url, auth = ('user', 'password'), data = reqData, headers = headers, cookies = c)

这个没有:

import requests

s = requests.Session()
url = 'http://XXXXXX.com.au?xxxxx'

s.auth = ('user', 'password')
s.headers.update({'X-CSRF-TOKEN': 'Fetch'})
r = s.get(url)
token = r.headers['x-csrf-token']

c = s.cookies

reqData = {'param' : 'value'}
headers = {'x-csrf-token': token}
r = s.post(url, data=reqData, headers=headers, cookies=c)

我尝试了第二个代码,无论是否显式复制和传递 cookie,以及将其从 cookiejar 转换为 dict。仍然获得 CSRF 令牌验证失败。

我现在很高兴使用第一个选项,但是我在 Session 上到底做错了什么?这可能只是所讨论的网络服务器的特性吗?

标签: python-3.xpython-requestscsrf

解决方案


推荐阅读