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

主要使用到的Postman功能

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

简要界面

数据加解密

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

各种参数设置

  • 明文的参数填写:

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

 

  • 请求头参数填写:

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

 

真正发送的数据:

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

 

请求处理脚本[Pro-request Script]

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

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

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

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

具体的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

// 设置环境变量参数,用于其他请求使用

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提供各种断言的操作,可以很好显示测试结果。

具体的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

// 返回数据处理

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();

}

结果的样子

 

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值