postman 脚本编辑
需求
有一个请求,需要在请求之前计算一个签名,然后从 header 中传入信息进行访问。 headers 有:
- X-Date:当前时间,格式
YYYY-mm-dd HH:MM:SS
。 - X-App-Id:当前应用的 ID。
- X-Signa:签名信息。
签名信息的计算是 signa = HmacSha1(md5(appId + date), secret)
,其中除了 secret 外其他变量均取自上方的 header。
以下为用 postman 的 Pre-Request Script 写了一个脚本,用来做这些准备。其中 secret 是用 appId 做 key 存在 collection 的变量表。
脚本
放置在 Postman 的 Pre-Request Script 中。
date = dateFormat("YYYY-mm-dd HH:MM:SS", new Date())
pm.collectionVariables.set("ask.headerDate", date);
appId = pm.request.headers.get("X-App-Id");
secret = pm.collectionVariables.get(appId);
var hash = CryptoJS.MD5(appId+date).toString();
sha = CryptoJS.HmacSHA1(hash, secret).toString()
console.log("appId: " + appId, "\ndate: " + date, "\nmd5: " + hash, "\nsecret: " + secret, "\nHmacSHA1: " + sha)
pm.request.headers.upsert({
key: "X-Signa",
value: sha
});
pm.request.headers.upsert({
key: "X-Date",
value: date,
})
function dateFormat(fmt, date) {
let ret;
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt);
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt;
}
网友评论