postman prerequest动态加密数据构造

app与服务端通信过程中有时需要加密,这样受保护的body更不易被破解。

 

例子:

  工作中有遇到类似于http://test.baidu.com/ad/conf?m2=xx&ch=xxxxx&sign=xxx的请求,通过postman、jmeter在进行请求时由于无法直接获取到sign值,无法顺利走通接口,这时候下边的代码就work了。

//签名规则:sign=md5(key1=value1&key2=value2&secret)
var secret = "abcde";//secret
var newtimestamp=Math.round(new Date().getTime());
console.log("newtimestamp:"+newtimestamp);

//请求参数名按照ASCII码升序排序
keys = Object.keys(request.data).sort(); 

//拼接待签名字符串
var str = [];
for (var p = 0; p < keys.length; p++) { 
    if(keys[p] == "sign" || request.data[keys[p]] === ""){
        // == 宽松相等,隐性类型转换,值相等,返回true;
        // === 严格相等,值和类型都相等,返回true
        continue;
    }
    if(keys[p] == "qbtime"){
        str.push(keys[p] + "=" + newtimestamp);
        continue;
    }
    str.push(keys[p] + "=" + request.data[keys[p]]);
}

var presign = str.join("&");
presign = presign+"&"+secret; //添加secret
console.log("presign:"+presign);
var signSecret = CryptoJS.MD5(presign).toString();  //md5
console.log("signSecret:"+signSecret);

//重设环境变量
pm.environment.unset("sign");
pm.environment.unset("timestamp");
pm.environment.set("sign", signSecret);
pm.environment.set("timestamp", newtimestamp);

 

posted @ 2019-09-20 11:49  凯西_Casey  阅读(596)  评论(0编辑  收藏  举报