You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JMeter中提取请求头的x-csrf-token并传递至POST HTTPS请求?

解决X-CSRF-Token提取失败及过期问题的方案

一、正确提取X-CSRF-Token的三种方式

  • 从响应头提取:多数服务会在首次初始化请求(如GET页面、基础接口)的响应头中返回X-CSRF-Token字段,直接取值即可。示例(Python requests):
import requests
session = requests.Session()
# 先发起初始化请求获取token
init_res = session.get("https://目标域名/初始化路径")
csrf_token = init_res.headers.get("X-CSRF-Token")
  • 从页面meta标签提取:若token嵌入在页面HTML中,查找<meta name="csrf-token" content="xxx">这类标签,用解析工具提取。示例(Python BeautifulSoup):
from bs4 import BeautifulSoup
soup = BeautifulSoup(init_res.text, "html.parser")
csrf_token = soup.find("meta", attrs={"name": "csrf-token"})["content"]
  • 从Cookie提取:部分服务会将token存储在Cookie中,键名通常为csrf_token或XSRF-TOKEN,直接从会话Cookie中获取:
csrf_token = session.cookies.get("XSRF-TOKEN")

二、避免Token过期的核心操作

  • 全程复用会话:必须使用同一个Session对象发送所有请求,不能每次请求新建会话——会话Cookie是Token校验的基础,会话不一致会直接触发过期错误。
  • 及时使用Token:获取Token后立即发起需要校验的请求(POST/PUT/DELETE等),不要长时间闲置后再用,多数服务的CSRF Token有10~30分钟的有效期。
  • 提前刷新Token:如果请求间隔较长,每次发起修改类请求前,先重新获取一次最新Token,再携带新Token发送请求。

三、正确传递Token的两种方式

  • 请求头传递:将Token放入X-CSRF-Token或X-XSRF-TOKEN请求头(严格匹配服务要求的字段名),示例:
headers = {"X-CSRF-Token": csrf_token}
res = session.post("https://目标域名/目标接口", headers=headers, data=请求数据)
  • 请求体传递:部分服务允许将Token放在请求体的_csrf或csrf_token字段中,比如表单提交场景:
data = {"username": "test", "password": "123456", "_csrf": csrf_token}
res = session.post("https://目标域名/登录接口", data=data)

四、额外排查方向

  • 检查Cookie状态:CSRF校验依赖会话Cookie,确保请求没有禁用Cookie,且会话Cookie正常携带。
  • 核对字段大小写:部分服务对请求头/参数名的大小写敏感,比如X-CSRF-Token和x-csrf-token可能不通用,严格按照服务文档或抓包结果传递。
  • 查看服务端日志:若以上操作均无效,联系服务端运维查看Token校验的具体失败日志,确认是Token过期、不匹配还是存在IP/UA等额外校验规则。

内容的提问来源于stack exchange,提问作者vengateshwaran Nadarajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:25:24