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

Karate测试中跨场景传递CSRF Token与JSESSIONID的方法咨询

实现后续接口携带指定JSESSIONID和CSRF Token的方案

这其实是典型的先获取校验凭证,再复用凭证调用后续接口的场景,我来给你拆解具体的实现步骤:

第一步:获取JSESSIONID和CSRF Token(调用path2)

首先必须先调用path2的GET请求,拿到后续请求需要的两个关键凭证:

  • 发送GET请求到path2,请求头必须包含Accept和Content-Type(比如设置为application/json,具体根据接口要求调整)
  • 从响应中提取两个信息:
    • JSESSIONID:从响应的Cookie中提取(接口会返回包含该值的Cookie)
    • CSRF TOKEN:从响应体中提取(比如接口返回JSON格式的{"csrfToken": "xxxxxx"},或者HTML页面中的隐藏字段,具体看返回结构)

举个Python代码示例(用requests库):

import requests

# 初始化会话,自动管理Cookie
session = requests.Session()

# 调用path2获取凭证
get_token_url = "path2"
headers = {
    "Accept": "application/json",
    "Content-Type": "application/json"
}
response = session.get(get_token_url, headers=headers)

# 提取CSRF Token(假设响应是JSON格式)
csrf_token = response.json().get("csrfToken")
# 提取JSESSIONID(session会自动保存Cookie,后续请求可直接复用)
jsessionid = session.cookies.get("JSESSIONID")

第二步:在后续接口中携带凭证

不管是调用场景1的path1 POST接口,还是场景2的任意接口,都需要携带这两个凭证:

  • JSESSIONID:推荐使用会话(Session)自动携带,或者手动在请求头的Cookie字段中添加JSESSIONID=xxxxxx
  • CSRF TOKEN:通常放在请求头中(比如X-CSRF-Token字段,具体字段名以系统要求为准),部分系统也可能要求放在表单参数里

以调用path1的POST接口为例:

# 调用path1的POST请求
login_url = "path1"
# 表单字段
form_data = {
    "Username": "your_test_username",
    "Password": "your_test_password"
}
# 请求头需要包含Accept、Content-Type,以及CSRF Token
request_headers = {
    "Accept": "application/json",
    "Content-Type": "application/x-www-form-urlencoded",
    "X-CSRF-Token": csrf_token
}

# 使用之前的session发送请求,自动携带JSESSIONID的Cookie
login_response = session.post(login_url, data=form_data, headers=request_headers)

其他工具的实现方式(比如Postman)

如果用接口测试工具,也可以通过环境变量来复用凭证:

  1. 发送path2的GET请求,在Tests标签页中编写脚本提取JSESSIONID和CSRF Token,并存入环境变量:
    // 提取CSRF Token(假设响应是JSON)
    let csrfToken = pm.response.json().csrfToken;
    pm.environment.set("csrfToken", csrfToken);
    // 提取JSESSIONID
    let jsessionid = pm.cookies.get("JSESSIONID");
    pm.environment.set("jsessionid", jsessionid);
    
  2. 后续请求中,在请求头里引用环境变量:
    • Cookie字段:JSESSIONID={{jsessionid}}
    • CSRF Token字段:X-CSRF-Token={{csrfToken}}

注意事项

  • 要注意凭证的有效期,如果JSESSIONID过期或者CSRF Token失效,需要重新调用path2获取新的凭证
  • 确保CSRF Token的传输方式和字段名与系统要求一致,部分系统可能会用Csrf-Token或其他字段名
  • 不要随意修改JSESSIONID和CSRF Token的来源,必须严格使用path2返回的值,否则会被系统拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:04:46