我试图使用Postman发送GET http请求,其中包含一个参数,该参数是通过获取完整请求查询字符串动态生成的(URL编码后,URL中问号右侧的所有内容) ,连接先前分配的共享密钥,然后对结果字符串执行SHA-1哈希。
我会使用预请求脚本来实现此目的。
谢谢。
答案 0 :(得分:7)
我实际上找到了一个解决方案并想分享它。
var params = [
["client_id", "222"]
,["account_id", ""]
];
// Build the request body string from the Postman request.data object
var requestBody = "";
var firstpass = true;
for(var i=0;i < params.length; i++) {
if(!firstpass){
requestBody += "&";
}
requestBody += params[i][0] + "=" + params[i][1];
firstpass = false;
postman.setGlobalVariable(params[i][0], params[i][1]);
}
requestBody += postman.getEnvironmentVariable("sharedSecretKey");
postman.setGlobalVariable("requestBody", requestBody);
var mac = "";
if(requestBody){
// SHA1 hash
mac = CryptoJS.SHA1(requestBody);
}
postman.setGlobalVariable("mac", mac);
然后我只需要在URL中设置参数: {{的baseUrl}} /获取的client_id = {{CLIENT_ID}}&安培; ACCOUNT_ID = {{ACCOUNT_ID}}&安培; MAC = {{MAC}}
其中{{baseUrl}}是一个环境变量 和{{client_id}},{{account_id}}是全局变量
希望它对某人有所帮助。
谢谢。
答案 1 :(得分:1)
受this answer的启发,我使用以下Postman预请求脚本创建了请求的SHA1哈希。
请注意,request.data
是一个隐含变量,CryptoJS
库由Postman Sandbox for pre-request scripts提供。
const hash = CryptoJS.HmacSHA1(request.data, 'yourSecret');
pm.globals.set('hash', hash);
您现在可以使用{{hash}}
语法将哈希值作为邮递员全局变量引用。
我所有目的都是为了模拟X-Hub-Signature
提供的GitHub Webhooks API头,因为我的Web服务会验证所有webhook负载以匹配签名。因此,为了测试我的Web服务,我还需要邮差来生成有效的签名标头。
这里是上述代码段的变体,用于生成X-Hub-Signature
请求标头值。
GITHUB_WEBHOOK_SECRET
。const hash = CryptoJS.HmacSHA1(
request.data,
pm.environment.get('GITHUB_WEBHOOK_SECRET')
);
pm.globals.set('X-HUB-SIGNATURE', 'sha1=' + hash);