还在为postman调用验签接口而发愁?Pre-request Script can do everything!

前情

最近,应安全部门要求,对一些rest接口 进行了简单的AES加密鉴权,又是一顿行云流水,所有接口加了前置拦截器,美滋滋。可是后来,postman验证接口时候出了问题,我tm每次都要手动cp一些鉴权header,这个header还有时效性,让人挠头。本想设置开关,但感觉不优雅。那么怎么办呢?

正文

直觉告诉我postman肯定早就提供了相应功能,于是了解到了Pre-request Script,大致看了下 非常简单,就是纯纯js,postman还提供了一些实例,帮助我们控制请求各个阶段,以及请求上下文。
我这里做几个场景实例,更丰富的使用方式大家可以自行研究:
1.取脚本中的变量 加入到请求参数中,这里以pathVariable为例:我们需要时间戳放在请求路径上,怎么办?:


time

pm.environment.set 设置环境变量 header 、path、body 皆可通过{{}}取到

2.加密算法:我们以MD5加密为例:
CryptoJS.MD5(str).toString().toUpperCase();
看起来是chrome内核?
3.获取header,这个有点坑,如果你header key带大写字母 访问的时候记得用小写访问。

header

var appSecret = request.headers.appsecret //注意appsecret 小写

  1. 向header中增加k-v
 postman.__execution.request.headers.members.push({key:'test',value:'haha'}); 
  1. console.log


    image.png
  2. 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]});
});



你可能感兴趣的:(还在为postman调用验签接口而发愁?Pre-request Script can do everything!)