美文网首页
postman 脚本

postman 脚本

作者: Robin92 | 来源:发表于2021-12-21 16:44 被阅读0次

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;
} 
 

相关文章

网友评论

      本文标题:postman 脚本

      本文链接:https://www.haomeiwen.com/subject/trmxqrtx.html