前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >如何利用Postman和Apipost进行参数编码与加密

如何利用Postman和Apipost进行参数编码与加密

原创
作者头像
多吃核桃
发布2025-02-27 16:54:25
发布2025-02-27 16:54:25
11600
代码可运行
举报
运行总次数:0
代码可运行

在API测试工作中,开发者和测试人员经常需要对请求中的某些参数进行编码或加密,以满足安全性和系统需求。这些操作可以针对单独的字段,也可以涉及整个请求体的复杂计算。为了解决这些需求,Postman与Apipost这两款流行的API测试工具为我们提供了便捷的自定义函数和内置函数支持。

本文将通过以下两个实际场景,讲解如何使用Postman与Apipost完成这些任务:

  1. 场景1:参数字段的编码与加密
  2. 用户登录时,对密码字段进行md5加密
  3. 场景2:根据请求体生成token
  4. 将请求的JSON体进行字典序排序后,计算签名,加密生成token,并追加到请求参数中。

在这些场景中,Postman和Apipost都提供了较为灵活的脚本支持,其强大的内置库如CryptoJS和编码函数等可以解决很多问题。除此外,Apipost在100%兼容Postman脚本语法的基础上,则进一步简化了操作,借助更直观的界面和少量代码,提升了测试效率。

接下来,让我们从实战角度详细探讨这两款工具的解决方法,并提供代码示例。

场景1:参数字段进行编码与加密操作

实现需求

用户登录时,将输入的明文密码通过md5加密后发送。

Postman的实现方式

Postman通过前置脚本(Pre-request Script)的形式支持这些场景。以下是对应实现的脚本示例。

要完成此步骤,Postman 需要两步,需要先在密码参数处引入变量,然后在前置脚本中去设置此变量值。

1、在Postman中加入变量password占位符;

值得注意的是,Postman以及Apipost使用变量的方式都是{{变量名}}

在Postman中引入变量`password`.png
在Postman中引入变量`password`.png

2、在Pre-request Script中定义变量password的值

Postman内置了CryptoJS库,可以用来完成大多数常见的加密和散列算法操作,例如md5、SHA1、SHA256等。

将用户输入的密码进行md5加密发送,代码如下:

代码语言:javascript
代码运行次数:0
复制
// 引入CryptoJS库
const CryptoJS = require('crypto-js');

// 用户输入的明文密码
let plainPassword = "123456";

// 使用MD5加密
let encryptedPassword = CryptoJS.MD5(plainPassword).toString();

// 将加密后的密码设置为环境变量,供请求体或参数使用
pm.environment.set("password", encryptedPassword);

console.log("加密后的密码是:", encryptedPassword);

此处,pm.environment.set 是Postman提供的环境变量设置方式,方便在请求中随时引用加密结果。执行后,实际发送的数据就是经过md5编码后的数据。

在Pre-request Script中定义变量`password`的值.png
在Pre-request Script中定义变量`password`的值.png

Apipost的实现方式

首先,Apipost完全兼容Postman的使用方式,上述使用方式在Apipost中完全同样适用,且无需修改任何脚本代码。

Apipost完全兼容Postman的使用方式.png
Apipost完全兼容Postman的使用方式.png

除此外,Apipost提供了更加便捷的使用方式。

首先我们只需点击参数值旁边的「插入动态值」图标,选择「固定值」-「添加处理函数」-「选择MD5」即可。如下图所示:

第一步:「插入动态值」

插入动态值
插入动态值

第二步:选择「固定值」以及「添加处理函数」

选择「固定值」以及「添加处理函数」
选择「固定值」以及「添加处理函数」

第三步:发送即可。

发送
发送

可视化的简单2步,我们实现了同样的效果。

场景2:根据请求体计算token

实现需求

根据请求体计算token.png
根据请求体计算token.png

针对以上接口,根据下述鉴权规则,我们需要将请求体的JSON数据进行:

  1. 排字典序;
  2. 加密生成密钥(如SHA256/HMAC);
  3. 将生成的密钥以参数名token的添加到到请求头或参数中。

Postman的实现方式

在Postman中,可以通过前置脚本完成上述复杂逻辑。以下是一个完整的实现:

代码语言:javascript
代码运行次数:0
复制
// 引入内置的CryptoJS库
const CryptoJS = require('crypto-js');

// 获取请求体
// pm.request.body.raw 默认取得的是字符串,需要JSON.parse转成对象
let requestBody = JSON.parse(pm.request.body.raw);
console.log( requestBody)
// Step 1: 排字典序
let sortedKeys = Object.keys(requestBody).sort(); // 获取排序后的键
let sortedBody = {};
sortedKeys.forEach(key => {
    sortedBody[key] = requestBody[key]; // 将键值对按顺序加入对象
});

// 转换为字符串格式
let sortedBodyString = JSON.stringify(sortedBody);

// Step 2: 使用SHA256生成签名
let secretKey = "mysecretkey123"; // 假设的秘钥
let token = CryptoJS.HmacSHA256(sortedBodyString, secretKey).toString(CryptoJS.enc.Hex);

// Step 3: 将token添加到环境变量
pm.environment.set("authToken", token);

console.log("生成的token是:", token);

稍后,我们可以在请求头中通过Postman的变量引用功能,添加:

代码语言:txt
复制
Authorization: Bearer {{authToken}}
在请求头中通过Postman的变量引用功能.png
在请求头中通过Postman的变量引用功能.png

这样,发送后,Postman就会字段计算 token值,并添加到请求头中,如下图所示:

image.png
image.png

Apipost的实现方式

在Apipost中,仍旧完全可以100%兼容上述 Postman 前置脚本。除此外,Apipost 支持进一步简化操作,无需引入变量,可以将token直接添加到请求头,以下是等价代码:

代码语言:javascript
代码运行次数:0
复制
// 引入内置的CryptoJS库
const CryptoJS = require('crypto-js');

// 获取请求体
// pm.request.body.raw 默认取得的是字符串,需要JSON.parse转成对象
let requestBody = JSON.parse(pm.request.body.raw);
console.log( requestBody);
// Step 1: 排字典序
let sortedKeys = Object.keys(requestBody).sort(); // 获取排序后的键
let sortedBody = {};
sortedKeys.forEach(key => {
    sortedBody[key] = requestBody[key]; // 将键值对按顺序加入对象
});

// 转换为字符串格式
let sortedBodyString = JSON.stringify(sortedBody);

// Step 2: 使用SHA256生成签名
let secretKey = "mysecretkey123"; // 假设的秘钥
let token = CryptoJS.HmacSHA256(sortedBodyString, secretKey).toString(CryptoJS.enc.Hex);

// Step 3: 无需引入变量,将token直接添加到请求头

pm.setRequestHeader("Authorization", `Bearer ${token}`);

相较于Postman,Apipost在操作上省去了引入环境变量的步骤,进一步提升效率。

总结:Postman与Apipost的选择

  • Postman 适合对脚本要求灵活性较高、且需自定义较多逻辑的场景。但是凡事皆须写脚本的逻辑导致学习成本高昂。
  • Apipost 不仅完全兼容了 Postman 的脚本,进一步的,对于常见需求的加密和编码操作上更加便捷,尤其是内置了更多实用函数,让新手用户可以快速上手完成编码与加密任务。

在实际项目中,可以根据团队的技术水平与项目复杂度选择最适合的工具。如果你正在进行复杂的API测试,不妨尝试这两种工具,根据本文中的实例动手实践!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 场景1:参数字段进行编码与加密操作
    • 实现需求
    • Postman的实现方式
    • Apipost的实现方式
  • 场景2:根据请求体计算token
    • 实现需求
    • Postman的实现方式
    • Apipost的实现方式
  • 总结:Postman与Apipost的选择
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档