0


postman响应体:“msg“: “请求缺失签名Sign“、 “msg“: “请求缺失时间戳“

问题原因:

请求标头有Sign、Timestamp,但是直接将网址复制到postman时,Headers没有自动生成这两个参数,所以运行时会报错。

postman:Body返回值报错信息

浏览器F12-接口请求标头:

那我们将请求表头的Sign、Timestamp直接复制到postman呢

问题描述:

直接将F12请求标头Sign、Timestamp的值复制到postman是不行的。

**如下图为直接复制的运行结果: **

解决办法:

1.Pre-request Script前置脚本中加入如下代码;(const daa = {type:"report"}//这一行是需要根据Body改的)

2.Headers添加Sign {{Sign}}、Timestamp {{timestamp}};

3.Body里面选raw--JSON。

Pre-request Script

function HashMap() {
    //特殊关键字(specialKey)用来处理特殊的保留字
    //这些保留字主要是Object对象中的固有属性和方法
    var specialKey = [
        'valueOf',
        'constructor',
        'toString',
        'toLocaleString',
        'ropertyIsEnumerable',
        'hasOwnProperty',
        'isprototypeOf',
        'prototype'
    ];
    //为特殊关键字提供单独存放值的空间
    var speicalValue = new Array(specialKey.length);

    //特殊关键字存取标记,true 表示该位已经有值
    var speicalFlag = new Array(specialKey.length);

    //存放普通的关键字,只需要一个普通的Object
    var normalHashMap = {};

    //将数值插入到HashMap
    this.put = function (key, value) {
        if (!key) {
            return false;
        }
        //处理特殊关键字
        for (var i = 0; i < specialKey.length; i++) {
            if (key == specialKey[i]) {//如果关键字等于某个特殊关键字
                speicalValue[i] = value;
                speicalFlag[i] = true;
                return true;
            }
        }
        //处理普通关键字
        normalHashMap[key] = value;
        return true;
    }

    this.get = function (key) {
        if (!key) {
            return null;
        }
        //先处理特殊关键字
        for (var i = 0; i < specialKey.length; i++) {
            if (key == specialKey[i]) {
                if (speicalValue[i]) {
                    return speicalValue[i];
                } else {
                    return null;
                }
            }
        }
        if (key in normalHashMap) {
            return normalHashMap[key];
        } else {
            return null;
        }
    }

    //清空HashMap
    this.clear = function () {
        speicalValue = new Array(specialKey.length);
        speicalFlag = new Array(specialKey.length);
        normalHashMap = {};
    }

    //判断是否包含key
    this.containsKey = function (key) {
        //先处理特殊关键字
        for (var i = 0; i < specialKey.length; i++) {
            if (key == specialKey[i]) {
                if (speicalFlag[i] == true) {//和关键字相同并且关键字的标志位为true
                    return true;
                } else {
                    return false;
                }
            }
        }
        //处理普通关键字
        if (key in normalHashMap) {
            return true;
        } else {
            return false;
        }
    }

    //判断是否包含Value
    this.containsValue = function (value) {
        if (!value) {
            return false;
        }
        var contains = false;
        for (var i = 0; i < speicalValue.length; i++) {
            var v = speicalValue[i];
            if (v == value) {
                contains = true;
                break;
            }
        }
        if (contains) {
            return contains;
        }
        for (var key in normalHashMap) {
            var v = normalHashMap[key];
            if (v == value) {
                contains = true
                break;
            }
        }
        return contains;
    }

    //返回hashMap的长度
    this.size = function () {
        var size = 0;
        for (var i = 0; i < speicalValue.length; i++) {
            if (speicalFlag[i] == true) {
                size++;
            }
        }
        for (var key in normalHashMap) {
            size++;
        }
        return size;
    }

    //判断hashMap是否为空
    this.isEmpty = function () {
        return this.size() == 0 ? true : false;
    }

    //根据一个key删除元素
    this.remove = function (key) {
        if (!key) {
            return false;
        }
        for (var i = 0; i < specialKey.length; i++) {
            if (key == specialKey[i] && speicalFlag[i] == true) {
                speicalFlag[i] = null;
                speicalValue[i] = null;
                return true;
            } else if (key == specialKey[i] && speicalFlag[i] == false) {
                return false;
            }
        }
        for (var k in normalHashMap) {
            if (k == key) {
                delete normalHashMap[k];
                return true;
            }
        }
        return false;
    }

    //取得Key值
    this.keySet = function () {
        return getStr(0);
    }

    //toString 方法
    //{phoneNo=13800138000, userName=tom}
    this.toString = function () {
        return getStr(1);
    }

    //返回类似java中Map的entrySet
    //[phoneNo=13800138000, userName=tom]
    this.entrySet = function () {
        return getStr(2);
    };

    //取得所有的values
    this.values = function () {
        return getStr(3);
    }

    //公共方法,用于封装返回字符串
    var getStr = function (flag) {
        //0: 中括号 返回keys
        //1:  花括号 返回keys和values组合
        //2: 中括号 返回keys和values组合
        //3: 中括号 返回values
        var result = "";
        for (var i = 0; i < specialKey.length; i++) {
            if (speicalValue[i] && speicalFlag[i] == true) {
                if (flag == 0) {
                    result += specialKey[i] + ",";
                } else if (flag == 3) {
                    result += JSON.stringify(speicalValue[i]) + ",";
                } else if (flag == 2) {
                    result += specialKey[i] + "=" + JSON.stringify(speicalValue[i]) + ",";
                } else {
                    result += specialKey[i] + "=" + JSON.stringify(speicalValue[i]) + "," + " ";
                }
            }
        }
        for (var key in normalHashMap) {
            if (flag == 0) {
                result += key + ",";
            } else if (flag == 3) {
                result += JSON.stringify(normalHashMap[key]) + ",";
            } else if (flag == 2) {
                result += key + "=" + JSON.stringify(normalHashMap[key]) + ",";
            } else {
                result += key + "=" + JSON.stringify(normalHashMap[key]) + "," + " ";
            }
        }
        if (flag == 1) {
            result = result.substring(0, result.length - 2)
            result = "{" + result + "}";
        } else {
            result = result.substring(0, result.length - 1);
            result = "[" + result + "]";
        }
        return result;
    }
}

// export default HashMap

const daa = {type:"report"}//这一行是需要根据Body改的
var time = new Date().getTime()
console.log(time)
pm.environment.set("timestamp", time);
const hashMap = new HashMap()
hashMap.put('param',daa)
hashMap.put('timestamp',time)
// console(hashMap)
const str = hashMap.toString()
console.log(str)
var key = '9900J7T2J91992'
let test = CryptoJS.HmacSHA256(str,key)
let sign = CryptoJS.enc.Hex.stringify(test).toUpperCase()
console.log(sign)
pm.environment.set("Sign", sign)

Headers

Body(代码有一行需要根据这个改)

标签: java 前端 服务器

本文转载自: https://blog.csdn.net/m0_46862648/article/details/134424262
版权归原作者 在努力的测试媛~yuan 所有, 如有侵权,请联系我们删除。

“postman响应体:“msg“: “请求缺失签名Sign“、 “msg“: “请求缺失时间戳“”的评论:

还没有评论