首页>软件资讯>常见问题

常见问题

如何编写postman预处理脚本

发布时间:2024-01-02 10:20:18人气:184

postman是一个强大的工具,做开发和测试的应该没有不知道的吧。小码哥这次想到的就是把代码里的请求都放到postman里,这样修改数据就方便了。

然而,我们遇到最大的问题就是,每个公司或者每个平台为了数据安全,都会有一套自己的加密和验签算法,就算你的参数是正确的,那签名不正确,数据也不会正常返回。下面小码哥就讲讲如何在postman的预处理脚本中来实现这个验签。


我们知道,发送http请求需要的几个基本条件:请求方式(post/get/put/delete等)、请求域名(xxx.com.cn)、请求参数(get:"?key1=value1&key2&value2" post:"{key1:value1,key2:value2}/file/raw")等等。我们需要在预处理脚本中拿到这些数据,并加以处理,得到验签的数据后,再放回到请求参数中,进行更新,这样就完成了数据的替换更新,postman再次请求的数据就是已经验签好的了,自然返回的数据也就没有问题了。下面我们就看下如何获取这些参数,并进行算签。


获取请求参数


目前大部分的请求都是post或者get,所以以这两个举例


// 获取请求方法

const requestMethod = pm.request.method;

// 获取请求参数,注意这里判断只有get和post的情况,其他情况请按照需求修改

let params = (requestMethod === 'GET') ? pm.request.url.query.toObject() : pm.request.body.toJSON();


2.设置默认参数


大部分的网络请求都会带上一个时间戳和一个apikey,来判断网络请求的有效期,有效期一般10分钟,apikey是对客户端进行区分的,从而防止抓包的网络攻击,所以我们要加上一个ts的默认请求参数,如下


// 设置默认参数

const defaultParams = {

    apikey: 'test',

    ts: Date.now()

};

3.合并请求参数


// 合并参数

Object.assign(params, defaultParams);

4.对请求的参数进行算签


对应apikey还会有一个apisecret,apisecret相当于apikey对应的密码,这个要妥善保存,可以做拆分或者再做一层加密,防止泄露。


算签的算法为了方便开发人员,一般过程都大差不差,常用的操作方式就是:1.得到参数,然后把参数排序用一定的方式拼接成一个要算签的字符串,我们这里称为signStr.2.然后对这个signStr进行一个简单的加密,一般是获取字符串的MD5值,得到的最后结果就是签名,一般我们称为sign。


一个简单的验签算法如下


// 生成签名

// 把key按照字母序进行排序

const apiSecret='xxxxx';

const sortedKeys = Object.keys(params).sort();

// 把所有参数进行字符串拼接得到signStr

const signStr = sortedKeys.map(key => `${key}=${params[key]}`).join('|');

const sign = CryptoJS.MD5(`${signStr}${apiSecret}`).toString();

5.把算出来的签名添加到请求参数里去


params.sign = sign;


6.最后更新请求参数


这里也要根据请求方式来更新


// 更新请求参数

if (requestMethod === 'GET') {

    pm.request.url.query = Object.keys(params)

        .map(key => `${key}=${params[key]}`)

        .join('&');

} else if (requestMethod === 'POST') {

    pm.request.body = params;

}

好了,这个签名我们更新上去以后,就可以直接请求了。


完整的代码,我列在这里,这个只是我自建的一个简单的算法,具体的情况要根据公司的需求来进行修改,例如目前很多post请求并不是表单,大部分都是在raw中上传json字符串,我们就需要用到postman里pm.request.body.raw字段,还有的需要在header里添加对应的字段等等,后面我会继续更新,将这部分补充完整,对您有帮助的话,欢迎关注北漂小码哥公众号。如果以上有不明白的,也可以在下面留言。


// 获取请求方法和完整的请求URL

const requestMethod = pm.request.method;


// 获取请求参数

let params = (requestMethod === 'GET') ? pm.request.url.query.toObject() : pm.request.body.toJSON();


// 设置默认参数

const defaultParams = {

    apikey: 'test',

    ts: Date.now(),

};


// 合并参数

Object.assign(params, defaultParams);

const apiSecret='xxxxx';

// 生成签名

const sortedKeys = Object.keys(params).sort();

const signStr = sortedKeys.map(key => `${key}=${params[key]}`).join('|');

const sign = CryptoJS.MD5(`${signStr}${apiSecret}`).toString();


params.sign = sign;


// 更新请求参数

if (requestMethod === 'GET') {

    pm.request.url.query = Object.keys(params)

        .map(key => `${key}=${params[key]}`)

        .join('&');

} else if (requestMethod === 'POST') {

    pm.request.body = params;

}



上一条:postman如何使用

下一条:Toad for Oracle助力数据库操作现代化,为您提高业务敏捷性!