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

如何在Postman预请求脚本中获取处理后的实际请求体?

解决Postman预请求脚本中获取最终处理后请求体的问题

实现思路

Postman在发送请求前会自动完成环境变量替换和JSON注释移除,但预请求脚本无法直接拿到这个最终处理后的请求体。要获取和实际发送完全一致的内容,需要手动模拟这两个处理步骤:先替换变量,再清理注释。

具体代码实现

1. 替换环境变量

通过pm.variables.replaceIn()处理原始请求体,替换所有环境变量为实际值:

const rawBody = pm.request.body.raw;
let processedBody = pm.variables.replaceIn(rawBody);

2. 移除JSON注释

用正则表达式模拟Postman的注释清理逻辑,覆盖单行和多行注释:

// 移除单行注释(// 开头到行末)
processedBody = processedBody.replace(/\/\/.*$/gm, '');
// 移除多行注释(/* ... */)
processedBody = processedBody.replace(/\/\*[\s\S]*?\*\//g, '');
// 清理注释移除后产生的多余空白行(和Postman处理逻辑对齐)
processedBody = processedBody.replace(/^\s*\n/gm, '');

3. 计算Hmac并设置请求头

此时processedBody就是和实际发送完全一致的请求体,用它进行Hmac计算:

// 计算MD5摘要(按你的原有逻辑)
const hashedPayload = CryptoJS.enc.Base64.stringify(CryptoJS.MD5(CryptoJS.enc.Utf8.parse(processedBody)));
// 生成并设置认证头
const hmacAuthHeader = getAuthHeader(pm.request.method, pm.request.url.toString(), processedBody);
pm.environment.set('hmacAuthHeader', hmacAuthHeader);

完整代码示例

// 获取原始请求体
const rawBody = pm.request.body.raw;
// 替换环境变量
let processedBody = pm.variables.replaceIn(rawBody);

// 清理JSON注释
processedBody = processedBody.replace(/\/\/.*$/gm, '');
processedBody = processedBody.replace(/\/\*[\s\S]*?\*\//g, '');
processedBody = processedBody.replace(/^\s*\n/gm, '');

// 计算Hmac并设置环境变量
const hashedPayload = CryptoJS.enc.Base64.stringify(CryptoJS.MD5(CryptoJS.enc.Utf8.parse(processedBody)));
const hmacAuthHeader = getAuthHeader(pm.request.method, pm.request.url.toString(), processedBody);
pm.environment.set('hmacAuthHeader', hmacAuthHeader);

注意事项

  • 若请求体是form-data或x-www-form-urlencoded格式,需通过pm.request.body.formdata/pm.request.body.urlencoded获取数据,转换为对应格式字符串后再处理。
  • 上述正则已避免误删JSON字符串内类似注释的内容(如"content://test"),无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:26:06