Python使用requests库如何从请求中获取x-csrf-token请求头
用Python requests库获取x-csrf-token的实现方法
和OpenBullet中<HEADERS(x-csrf-token)>的获取逻辑对应,requests库的实现可以参考以下步骤,根据站点csrf-token的返回位置选择对应方法即可:
前置要求
必须使用requests.Session()创建会话实例,维持上下文cookie和会话状态,否则获取到的csrf-token会因会话不匹配被站点判定无效。
常见获取场景
1. 从响应头中获取(和OpenBullet逻辑完全一致)
如果目标站点的csrf-token直接在前置请求的响应头中返回,直接从响应的headers属性提取即可:
import requests # 初始化会话 session = requests.Session() # 发起前置请求,通常是目标站点的表单页、登录页或csrf下发接口 pre_response = session.get("https://你的目标站点地址") # 提取x-csrf-token,部分站点响应头key为全小写,可做兼容处理 csrf_token = pre_response.headers.get("X-Csrf-Token") if not csrf_token: csrf_token = pre_response.headers.get("x-csrf-token") # 后续提交请求时携带即可 post_response = session.post( "https://目标站点提交接口地址", headers={ "X-Csrf-Token": csrf_token, # 其他必要请求头,如User-Agent、Content-Type等 }, # 提交的表单/JSON参数 json={"key": "value"} )
2. 从HTML页面的meta标签中获取
如果站点将csrf-token放在页面的meta标签中(格式通常为<meta name="csrf-token" content="xxxx">),可以用正则快速提取:
import re # 从前置请求返回的HTML文本中匹配csrf-token match_res = re.search(r'<meta name="csrf-token" content="(.*?)"', pre_response.text) if match_res: csrf_token = match_res.group(1)
3. 从Cookie中获取
部分站点会将csrf-token存在Cookie中,常见key为XSRF-TOKEN或csrf_token,提取方法如下:
# 从会话cookie中提取 csrf_token = session.cookies.get("XSRF-TOKEN") # 也可以直接从响应cookie中提取 csrf_token = pre_response.cookies.get("XSRF-TOKEN")
注意事项
- 不同站点的csrf-token命名、返回位置存在差异,你可以先手动抓包一次前置请求,确认token的返回位置后再选择对应提取方法
- 所有请求必须共用同一个session实例,不要单独用
requests.get/requests.post发起请求,否则会话不关联会导致token失效
内容的提问来源于stack exchange,提问作者zached
相关产品推荐
相关产品推荐

