javascript - 如何在 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
解决方案
我在找到它的地方丢失了来源。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' 如果你不擅长编码,则无需更改他的函数中的任何内容。创造它的人有金色的手。只需放入您的预先请求中
推荐阅读
- javascript - 如何更新每天午夜突出显示的单元格
- javascript - ES6:使用 Template LiteralsPassed Freecodecamp 创建字符串
- c# - 奇怪的 GraphicsPath.AddArc() 行为
- c# - 在 identityDbContext 中序列化枚举数组
- spring - springdoc-openapi 在没有服务器的情况下生成 openapi yaml
- android - 我在哪里处理 Clean Architecture 中的 UI 规则?
- python - 烧瓶:sqlalchemy.exc.OperationalError
- python - 如何将 pandas 数据框中的数据标准化为时间序列的起始值?
- python - 使用 SCRIPT_FILENAME 设置 FastCGI
- python - 超链接在作为新标签打开时被阻止 - django