如何在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
相关产品推荐
相关产品推荐

