postman数据加解密实现APP登入接口模拟请求
程序员文章站
2022-04-10 21:07:40
目录主要使用到的postman功能请求处理脚本[pro-request script]响应处理脚本[tests]主要使用到的postman功能 环境变量:只要新建就好了,操作都是在代码中处理的。...
主要使用到的postman功能
- 环境变量:只要新建就好了,操作都是在代码中处理的。
- 日志查看:菜单位置:view → show postman console ,显示这个窗口视图就可以了
- 请求时执行的脚本:pre-request script 标签页,使用语言javascript, 通常作为加密。
- 接受返回时执行的脚本:tests 标签页,作为返回参数的处理,通常为解密。
数据加解密
接口要求对params的数据,已json形式进行加密发送。
各种参数设置
- 明文的参数填写:
这里的参数是之后脚本使用的基础数据,也可以类似相当于app登入界面需要填写的数据。
- 请求头参数填写:
这里的请求头数据,为系统接口约定的一些既定规则参数。
真正发送的数据:
对,就一个参数,具体的参数在脚本处理之后,进行加密之后,也就是一个很长的字符串 ╮(╯_╰)╭
请求处理脚本[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接口请求的资料请关注其它相关文章!
上一篇: linux 线程基础