如何根据uri中具有{{variables}}的请求在预请求中生成hash512

时间:2019-05-27 20:11:52

标签: javascript hash postman

因此,当我需要为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

1 个答案:

答案 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” 如果您不擅长编码,则无需更改其功能。创造它的家伙有金手。只需放置在您的预先请求中