前情
最近,应安全部门要求,对一些rest接口 进行了简单的AES加密鉴权,又是一顿行云流水,所有接口加了前置拦截器,美滋滋。可是后来,postman验证接口时候出了问题,我tm每次都要手动cp一些鉴权header,这个header还有时效性,让人挠头。本想设置开关,但感觉不优雅。那么怎么办呢?
正文
直觉告诉我postman肯定早就提供了相应功能,于是了解到了Pre-request Script,大致看了下 非常简单,就是纯纯js,postman还提供了一些实例,帮助我们控制请求各个阶段,以及请求上下文。
我这里做几个场景实例,更丰富的使用方式大家可以自行研究:
1.取脚本中的变量 加入到请求参数中,这里以pathVariable为例:我们需要时间戳放在请求路径上,怎么办?:
pm.environment.set 设置环境变量 header 、path、body 皆可通过{{}}取到
2.加密算法:我们以MD5加密为例:
CryptoJS.MD5(str).toString().toUpperCase();
看起来是chrome内核?
3.获取header,这个有点坑,如果你header key带大写字母 访问的时候记得用小写访问。
var appSecret = request.headers.appsecret //注意appsecret 小写
- 向header中增加k-v
postman.__execution.request.headers.members.push({key:'test',value:'haha'});
-
console.log
- debug ?不会 谁教教我
还有很多api 等你发掘 ,几乎满足各种场景。
完整示例
var appSecret = request.headers.appsecret;
if (typeof (appSecret) === 'undefined' || appSecret === null || appSecret === '') {
throw {name: 'param error', message: 'appSecret 未设置'};
}
var appKey = request.headers.appkey;
if (typeof (appKey) === 'undefined' || appKey === null || appKey === '') {
throw {name: 'param error', message: 'appKey 未设置'};
}
function getTimestamp(){
var time=new Date().getTime();
pm.environment.set("time", time);
return time;
}
function getRandom(){
var random= (Math.random() * 100).toFixed(3);
pm.environment.set("random", random);
return random;
}
function getSign(){
var time=pm.environment.get("time");
var random=pm.environment.get("random");
var str= time + "" + random + appSecret;
return CryptoJS.MD5(str).toString().toUpperCase();
}
request.headers.timestamp= getTimestamp();
request.headers.random = getRandom();
request.headers.sign = getSign();
request.headers['Content-Type']='application/json';
for (var member of postman.__execution.request.headers.members) {
if (member.key == "appsecret") {
postman.__execution.request.headers.members.splice(postman.__execution.request.headers.members.indexOf(member), 1);
}
}
//将其他header添加到请求头
Object.keys(request.headers).forEach(key => {
postman.__execution.request.headers.members.push({key:key,value:request.headers[key]});
});