当前位置: 代码网 > it编程>编程语言>Javascript > postman数据加解密实现APP登入接口模拟请求

postman数据加解密实现APP登入接口模拟请求

2024年05月18日 Javascript 我要评论
主要使用到的postman功能 环境变量:只要新建就好了,操作都是在代码中处理的。 日志查看:菜单位置:view → show postman console ,显示这个窗口视图就可以了

主要使用到的postman功能

  • 环境变量:只要新建就好了,操作都是在代码中处理的。
  • 日志查看:菜单位置:view → show postman console ,显示这个窗口视图就可以了
  • 请求时执行的脚本:pre-request script 标签页,使用语言javascript, 通常作为加密。
  • 接受返回时执行的脚本:tests 标签页,作为返回参数的处理,通常为解密。

简要界面

数据加解密

接口要求对params的数据,已json形式进行加密发送。

各种参数设置

  • 明文的参数填写:

这里的参数是之后脚本使用的基础数据,也可以类似相当于app登入界面需要填写的数据。

接口参数 

  • 请求头参数填写:

这里的请求头数据,为系统接口约定的一些既定规则参数。

请求头参数 

真正发送的数据:

对,就一个参数,具体的参数在脚本处理之后,进行加密之后,也就是一个很长的字符串 ╮(╯_╰)╭

body数据.

请求处理脚本[pro-request script]

脚本的处理直接看代码即可。

脚本常用的一些封装类是postman封装的,比如:

  • 环境变量:pm.environmen
  • t数据加密工具包:cryptojs
  • 数学函数工具包:math

【在代码编写框边上,有postman提供的常用操作代码生成,灰常好用的】

具体的代码:

// 设置环境变量参数,用于其他请求使用
pm.environment.set("lkm-sys-id",pm.request.headers.get("lkm-sys-id"));
pm.environment.set("lkm-app-id",pm.request.headers.get("lkm-app-id"));
pm.environment.set("lkm-organ-id",pm.request.headers.get("lkm-organ-id"));
pm.environment.set("lkm-app-ver",pm.request.headers.get("lkm-app-ver"));

// json化参数,用于数据签名
const paramsstring = request.url.split('?')[1]; 
const eachparamarray = paramsstring.split('&'); 
let params = {}; 
eachparamarray.foreach((param) => { 
    const key = param.split('=')[0]; 
    const value = param.split('=')[1]; 
    object.assign(params, {[key]: value}); 
}); 
console.log(params);

// 数据的处理
var requestparams = params;
console.log(requestparams);

// 接口定义的数据签名处理
var timestamp = math.round(new date());
pm.environment.set("timestamp",timestamp);
var shuijishu = "xo337hnxwynsoldw";
pm.environment.set("shuijishu",shuijishu);
// 数据签名,系统接口约定的
var lkmsign =  pm.request.headers.get("lkm-sys-id")
                + pm.request.headers.get("lkm-app-id")
                + "1122334455667788"
                + timestamp
                + shuijishu
                + ""
                ;
pm.environment.set("lkmsign",cryptojs.md5(lkmsign).tostring().touppercase());
//  ==================    数据签名处理结束   ===================================

// ===================== 加解密数据  ==========================================
/// aesdata 处理
var aesdata = dealwithaesdata(requestparams);
pm.environment.set("data", aesdata);  // 这个就是上面截图被用到的最终发送的需要的数据

///  ↓↓↓↓↓↓↓↓↓↓↓↓   常用aes加解密方法 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ///
// aesdata数据处理 (content 传字典)
function dealwithaesdata(content) {
    console.log('aesdata明文: ' + json.stringify(content));
    const key = cryptojs.enc.utf8.parse("****************");
    const iv = cryptojs.enc.utf8.parse("0000000000000000");
    const encrypted = cryptojs.aes.encrypt(json.stringify(content), key, { iv: iv, mode: cryptojs.mode.cbc, padding: cryptojs.pad.pkcs7 });  //cbc
    return encrypted.tostring();
}

响应处理脚本[tests]

  • 响应数据,处理就是解密显示了。
  • 需要关注的:postman提供各种断言的操作,可以很好显示测试结果。

具体的代码:

// 返回数据处理
var jsondata = json.parse(responsebody);
var responsedata = json.parse(decryptresponsedata(jsondata.data)); // 数据解密
let success = responsedata['success'];
var responseresult = responsedata["data"];

// 数据token记录,左右后续接口使用的
try {
    let token = responseresult["token"];
    pm.environment.set("token", "bearer "+token);
    console.log("token:" + token);
} catch (err) {
    tests['expect response data to be valid token'] = false;
    tests[`response data: ${responseresult}`] = true;
    console.error(err);
}

// 数据日志打印
console.log("jsondata:以下对象是响应数据")
console.log(jsondata);
console.log("responsedata:以下对象是解析的第一层数据")
console.log(responsedata);
console.log("responseresult:以下对象是解析的第二层数据")
console.log(responseresult);

// 环境变量设置,用于登入后,其他接口使用。
console.log(responseresult.agentid);
pm.environment.set("agentid",responseresult.agentid);
pm.environment.set("agentcode",responseresult.agentcode);
pm.environment.set("agentname",responseresult.agentname);
// pm.environment.set("token",responseresult.token);

// 设置断言 postman面上提供好个通用的断言生成,可以试试
tests["业务返回码code=200,成功!"] = responsedata.code === 200 ;

/// 解密返回数据
function decryptresponsedata(content) {
    const key = cryptojs.enc.utf8.parse("*****************");
    const iv = cryptojs.enc.utf8.parse("0000000000000000");
    const decrypt = cryptojs.aes.decrypt(content, key, { iv: iv, mode: cryptojs.mode.cbc, padding: cryptojs.pad.pkcs7 });
    const decryptedstr = decrypt.tostring(cryptojs.enc.utf8);
    return decryptedstr.tostring();
}

结果的样子

最终数据

模拟加密接口的请求差不多就这个样子了,至于别的操作,就要以后再学习了,更多关于postman登入app接口请求的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com