因此,当我需要为PRE-REQUEST脚本中的每个请求设置x-auth标头时,我正在使用API。
我的请求网址中有变量,即{{baseUrl}}{{basePath}}{{businessID}}/users?name={{userName}}......etc
我需要获取整个地址,并将secretKey
变量添加到地址末尾,然后从中获取hash512。
如果我的地址中没有变量,即dummy.com/12321-e213-21-3e?name=John
我这样做是:
var secret = "1234qwerHr2";
var url = request.url.slice(9); //sliced because I don't need to include baseUrl to hash
var hashedPayload = CryptoJS.enc.Hex.stringify(CryptoJS.SHA512(url+secret));
这将返回所需的结果。
这是我尝试使用变量的相同代码时记录的内容
console.log(url); =>>>>>>> asePath}}{{businessID}}/users?name={{userName}}......etc
定义了所有变量,可以肯定
基本问题是:如何使用var url = request.url;
获取变量值的url,我不需要{{businessID}}/users?name={{userName}}
而是12321-e213-21-3e?name=John
答案 0 :(得分:0)
我失去了找到它的来源。邮递员github上的某个地方发出线程
var secret = pm.globals.get("devSecretKey");
pm.myUtility = {
interpolateVariable: function (str) {
return str.replace(/\{\{([^}]+)\}\}/g, function (match, $1) {
// console.log(match)
let result = match; //default to return the exactly the same matchd variable string
if ($1) {
let realone = pm.variables.get($1);
if (realone) {
result = realone
}
}
return result;
});
},
getUrl: function () {
let url = pm.request.url.getRaw();
url = this.interpolateVariable(url)
let {
Url
} = require('postman-collection')
return new Url(url);
},
getUrlTest: function () {
let url = pm.request.url.getRaw();
url = this.interpolateVariable(url)
// let {
// Url
// } = require('postman-collection')
//return new Url(url);
return pm.request.url.parse(url);
}
}
var requestPath = pm.myUtility.getUrl().getPath();
var requestQuery =pm.myUtility.getUrl().getQueryString();
var hashedPayload = CryptoJS.enc.Hex.stringify(CryptoJS.SHA512(requestPath+"?"+requestQuery+secret)); //I added '?' because when you use getQueryString() i does not have '?' before query
pm.environment.set("tempAuthHash", hashedPayload);// use this in your header
他编写的此函数将您的{{variable}}转换为“ variableValue” 如果您不擅长编码,则无需更改其功能。创造它的家伙有金手。只需放置在您的预先请求中