Как сгенерировать hash512 в предварительном запросе из запроса с {{variable}} в uri - PullRequest
0 голосов
/ 27 мая 2019

Поэтому я работаю над API, когда мне нужно установить заголовок x-auth для каждого запроса в сценарии PRE-REQUEST.

В моем запросе есть переменные, т. Е. {{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

Все переменные определены, это точно

В основном вопрос: как получить URL со значениями переменных, используя var url = request.url; Мне нужно не {{businessID}}/users?name={{userName}}, а 12321-e213-21-3e?name=John

1 Ответ

0 голосов
/ 28 мая 2019

Я потерял источник, где нашел его. Где-то на почтальоне 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' Не нужно ничего менять в его функциях, если вы плохо разбираетесь в кодировании. У парня, который его создал, золотые руки. Просто укажите в своем предварительном запросе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...