【问题标题】:How to generate hash512 in pre-request from request that has {{variables}} in uri如何在 uri 中具有 {{variables}} 的请求的预请求中生成 hash512
【发布时间】:2019-05-28 13:07:30
【问题描述】:

所以当我需要为 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

【问题讨论】:

    标签: javascript hash postman


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      相关资源
      最近更新 更多