如何在Requestly API Client中复用API响应令牌到后续请求
解决Requestly API Client自动刷新并应用Access Token的问题
核心思路
利用Requestly的环境变量、响应提取规则和前置脚本,实现登录token自动提取、存储,并自动注入到后续请求的头中,甚至在token过期时自动触发登录刷新。
步骤1:创建环境变量存储Token相关信息
- 打开Requestly API Client的「环境」面板
- 创建3个变量:
access_token:初始值留空,用于存储最新的令牌token_expiry:初始值留空,存储令牌过期时间戳base_url:填入你的API域名(比如https://your-api-server.com)
步骤2:配置登录请求的响应提取规则
针对你的POST /api/auth/login请求:
- 编辑该请求,切换到「响应处理」标签
- 添加「提取变量」操作,配置:
- 提取路径:输入
$.access_token(JSONPath语法,匹配响应中的access_token字段) - 目标变量:选择环境变量中的
access_token
- 提取路径:输入
- 再添加一个「提取变量」操作,配置:
- 提取路径:输入
$.expires_in - 目标变量:临时变量(比如
temp_expires)
- 提取路径:输入
- 接着添加「运行脚本」操作,写入脚本计算过期时间并存储:
const expiresIn = pm.variables.get('temp_expires'); pm.environment.set('token_expiry', Date.now() + expiresIn * 1000); - 保存所有规则,以后每次执行登录请求,token和过期时间会自动存入环境变量。
步骤3:给需要Token的请求自动添加Authorization头
以GET /api/user/profile为例:
- 编辑该请求,切换到「请求预处理」标签
- 添加「添加请求头」操作:
- 头名称:
Authorization - 头值:
Bearer {{access_token}}(双花括号引用环境变量)
- 头名称:
- 保存规则,后续执行该请求时,会自动从环境变量读取token填充到头中。
如果有多个需要token的请求,可以批量选中后统一添加该规则。
步骤4:实现Token过期自动触发登录(可选)
如果想彻底自动化,让请求在token过期时自动先登录刷新:
- 打开需要token的请求的「请求预处理」标签
- 添加「运行脚本」操作,写入以下脚本:
const accessToken = pm.environment.get('access_token'); const tokenExpiry = pm.environment.get('token_expiry'); const baseUrl = pm.environment.get('base_url'); // 检查token是否存在或已过期 if (!accessToken || Date.now() > tokenExpiry) { // 发起登录请求 pm.sendRequest({ url: `${baseUrl}/api/auth/login`, method: 'POST', header: { 'Content-Type': 'application/json' }, body: { mode: 'raw', raw: JSON.stringify({ username: 'user@example.com', password: 'password123' }) } }, function (err, res) { if (!err) { const respData = res.json(); // 更新环境变量 pm.environment.set('access_token', respData.access_token); pm.environment.set('token_expiry', Date.now() + respData.expires_in * 1000); // 重新发起当前请求 pm.sendRequest(pm.request, function (reqErr, reqRes) { pm.response.set(reqRes); }); } else { console.error('自动登录失败:', err); pm.response.set({ status: '500', body: '自动登录失败' }); } }); // 暂停当前请求,等待登录完成 return false; } - 保存脚本,以后执行该请求时,会自动检查token状态,过期则先登录刷新再执行请求。
内容的提问来源于stack exchange,提问作者Kanishk Rawat
相关产品推荐
相关产品推荐

