前言

在使用postman发送请求测试接口时,有时后端网关可能做了接口签名验证,会导致我们修改了参数再次发送请求被网关拦截。本文将说明如何通过postman工具在请求发起之前获取json参数,并计算签名,并放到header中。注意:本文只说明postman如何添加动态请求头,具体签名怎么生成的,需要看自己所用系统的代码逻辑

理解签名参数的作用

签名参数通常用于API请求的身份验证和数据完整性验证,确保请求未被篡改。常见签名算法包括MD5、SHA-1、HMAC等,需结合时间戳、随机字符串等动态参数生成。本文只是做了简单的MD5加密生成签名,并未用到复杂的加密算法,可供参考

设置请求头参数

方式一

在本人所用的系统中,签名生成的逻辑是取出json参数,再将这个json参数字符串md5加密

打开Scripts -> Pre-request

放入如下代码:

// 获取json参数
let raw = pm.request.body.raw;

// 本人这里由于操作系统原因需要 将 unix换行符换成 windows的
// 否则可见字符看似一样,其实是不同的字符串,加密出来的md5是不同的
// 如果想确认字符串是否完全一致,打印字节数组是一个办法
raw = raw.replaceAll("(?<!\r)\n", "\r\n");

// md5加密
// 这里会提示CryptoJS弃用,你要是有强迫症可以考虑使用
// const hash = pm.crypto.createHash('md5').update(raw).digest('hex');
// 但是某些postman版本可能没有pm.crypto对象
const md5 = CryptoJS.MD5(raw).toString();

// 添加到请求头中,sign是自定义的键
pm.request.headers.add(
    {key: "sign", value: md5}
);

方式二

打开Scripts -> Pre-request,放入如下代码

// 获取json参数
let raw = pm.request.body.raw;

// 这里可以做你自己需要的处理
raw = raw.replaceAll("(?<!\r)\n", "\r\n");

// md5加密
const md5 = CryptoJS.MD5(raw).toString();

// 设置变量到环境中,sign是自定义的键
pm.environment.set("sign", md5);

// 或者设置到全局,所有接口可用
// pm.globals.set("sign", md5);

打开headers,添加请求头获取变量

测试

发送请求,后端就已经看到请求头参数sign了。或者直接在脚本里面打印

// 获取当前请求的所有 headers
const headers = pm.request.headers;

// 遍历并打印每个 header
headers.each(header => {
    console.log(`Header: ${header.key} = ${header.value}`);
});

Logo

葡萄城是专业的软件开发技术和低代码平台提供商,聚焦软件开发技术,以“赋能开发者”为使命,致力于通过表格控件、低代码和BI等各类软件开发工具和服务

更多推荐