美文网首页
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