postman中使用Pre-request Script

一、get方法

get请求时 ,有多个params,并且有一个参数为sign,这个参数是有其他params拼接之后md5加密得到的,如何通过js语句获取params参数并生成sign。

const CryptoJS = require('crypto-js');  // 引入 CryptoJS 库进行 MD5 加密
// 获取请求的 URL 参数
const params = pm.request.url.query.members;
// 创建一个空对象用于存储参数
let paramsObj = {};

// 遍历参数并存入对象,即使值为空也处理
params.forEach(param => {
    if (param.key) { // 只需确保键存在
        paramsObj[param.key] = param.value ?? ""; // 如果值为 undefined 或 null,使用空字符串替代
    }
});

// 将参数对象的键按字典顺序排序并拼接字符串
let sortedKeys = Object.keys(paramsObj).sort();
let paramString = sortedKeys.map(key => `${key}=${paramsObj[key]}`).join('&');

console.log('Param String:', paramString);  // 打印拼接后的字符串,用于调试,可以在postman的console中进行查看

// 对拼接后的字符串进行 MD5 加密
let sign = CryptoJS.MD5(paramString).toString();

console.log('MD5 Sign:', sign);  // 打印 MD5 加密后的 sign 值,用于调试

// 将生成的 sign 参数添加到请求参数中
pm.request.url.query.add({ key: 'sign', value: sign });

二、post方法

let param1 = pm.request.body.urlencoded.get('param1'); // 获取方式和get方法不同
// 多个参数一次获取即可
postman.setGlobalVariable("sign", CryptoJS.MD5(s).toString());

三、加密

var public_key ='-----BEGIN PUBLIC KEY-----\n'+
                'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'+
                '\n-----END PUBLIC KEY-----'
//postman自带的加密函数是cryptoJS,无法满足;因此需要引用第三方库forge.js
//调用forge.js服务的地址:https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js打不开时,就用https://lzq1357.gitee.io/various/forge_min.js
let passwd = "12312312";   ## 自己设置的明文密码,
const forge_url = "https://raw.githubusercontent.com/loveiset/RSAForPostman/master/forge.js"
//定义Rsa加密函数encryptRsa,其中public_key为公钥,clearText为所需要加密的内容
function encryptRsa(public_key,clearText){
    console.info('clearText:' + clearText)
    //公钥转化为pem格式
    var publicKey = forge.pki.publicKeyFromPem(public_key)
    //创建缓冲区,所需要加密内容设置编码格式
    var buffer = forge.util.createBuffer(clearText, 'utf8')
    //转化为字节
    var bytes = buffer.getBytes()
    //publicKey.encrypt(bytes,'RSAES-PKCS1-V1_5')加密函数,把明文使用'RSAES-PKCS1-V1_5'加密成密文
    //forge.util.encode64()把加密后的密文按encode64进行编码输出
    var encryptedText = forge.util.encode64(publicKey.encrypt(bytes,'RSAES-PKCS1-V1_5',{
        md:forge.md.sha256.create(),
        mgf1:{
            md:forge.md.sha1.create()
        }
    }));
    //控制台输出加密内容
    console.info('encryptedText:' + encryptedText)
    return encryptedText;   
};
//第一次运行时从网络加载forgeJS,会导致请求失败
if(!pm.globals.has('forgeJS')){
    console.log('request forge.js from ' + forge_url)
    pm.sendRequest(forge_url,function(err,res){
        if(err){
            console.error(err)
        } else {
            console.info("request forge.js: Succeed,please try again")
            pm.globals.set('forgeJS',res.text())
        }
    });
    return;
};
//设置全局变量forgeJS
eval(pm.globals.get('forgeJS'))
//定义加密,调用Rsa加密函数encryptRsa
var encryptedText = encryptRsa(public_key, passwd)
//控制台输出加密
console.log(encryptedText)

pm.environment.set("password",encryptedText)
postman.setGlobalVariable("password", encryptedText);

参考:Postman使用RSA加密字段及保存认证token_postman rsa加密-CSDN博客

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值