首页 > 解决方案 > 如何在 uri 中具有 {{variables}} 的请求的预请求中生成 hash512

问题描述

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

定义了所有变量,这是肯定的

基本上问题是:如何使用变量值获取 urlvar url = request.url;我不需要{{businessID}}/users?name={{userName}}12321-e213-21-3e?name=John

标签: javascripthashpostman

解决方案


我在找到它的地方丢失了来源。postman 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' 如果你不擅长编码,则无需更改他的函数中的任何内容。创造它的人有金色的手。只需放入您的预先请求中


推荐阅读