想起来之前在借助百度翻译接口做翻译小工具的时候,需要把参数进行md5加密后再传输。
而在平时的接口测试工作中难免会遇到类似这种请求参数,比如md5加密、时间戳、随机数等等。固然可以先计算出准确的参数,但这样的话修改成本就太大了,每次都得改,所以我们在发送请求前需要提前构造好参数供请求调用。
像随机数、md5数字签名这种通过python可以很便捷的实现。这里主要说一下如何在postman中实现自动生成md5等并调用,算是继续补充postman的使用技巧吧
 
继续拿百度通用翻译接口作为栗子:
接口文档如下
然后是一些说明
(1)签名是为了保证调用安全,使用MD5算法生成的一段字符串,生成的签名长度为 32位,签名中的英文字符均为小写格式;
(2)为保证翻译质量,请将单次请求长度控制在 6000 bytes以内。(汉字约为2000个);
(3)签名生成方法如下:
1、将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看)
按照 appid+q+salt+密钥 的顺序拼接得到字符串1。
2、对字符串1做md5,得到32位小写的sign。
官方举例:将apple从英文翻译成中文:
请求参数:
q=apple
from=en
to=zh
appid=2015063000000001
salt=1435660288
平台分配的密钥: 12345678
生成sign:
>拼接字符串1
拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678
得到字符串1 =2015063000000001apple143566028812345678
>计算签名sign(对字符串1做md5加密,注意计算md5之前,串1必须为UTF-8编码)
sign=md5(2015063000000001apple143566028812345678)
sign=f89f9594663708c1605f3d736d01d2d4
完整请求为:
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
OK,下面进入正题,介绍如何在postman中生成随机数、md5签名,然后调用
1.首先要在Pre-request Script标签中编写脚本
因为要自动生成随机数、md5签名等传给接口,然后调用接口,即在请求前做好这些准备工作,所以要在Pre-request Script标签中编写脚本
2.编写思路
(1)把一些固定参数以及会被其他参数引用到的参数设置为环境变量,所以先在环境变量中添加appid和secretKey
(2)sign=appid+q+salt+密钥 的MD5值,可以看到要翻译的字符串q也是生成sign的一部分,但是每次翻译的内容不同,意味着q是变化的,所以不能把它写死到postman的params中。
开始想把q直接设置成环境变量,然后在Pre-request Script中读取这个环境变量,结果发现在Pre-request Script中是无法通过{{}}引用环境变量的;
然后就换个思路,还是把q写到Pre-request Script中,先把它定义为一个字符串,然后再创建一个环境变量,把q的值传给这个环境变量,最后在params中引用这个环境变量就好了(要翻译不同内容时,自行修改q的内容)
 
下面是完整的脚本和注释
//定义要翻译的字符串
var query = "霸王别姬"; //每次翻译不同内容时,在这里修改
pm.environment.set("q", query); //设置一个环境变量q,接收源字符串 //获取预先设置为环境变量的appid和secretKey
appid = pm.environment.get("appid");
secretKey = pm.environment.get("secretKey"); //定义一个随机数(32768, 65536)之间
var salt = parseInt(Math.random()*(32769)+32768,10);
//将随机数转换为字符串
var s = salt.toString();
console.log(salt);
//将生成的随机数设置为环境变量,方便传参
pm.environment.set("salt", salt); //定义一个由appid、要翻译的字符串、随机数、密钥组合成一个字符串
var str = appid + query + salt + secretKey;
console.log(str); //将str进行md5加密
var strmd5= CryptoJS.MD5(str).toString();
//let md5Str = CryptoJS.MD5(str).toString();
console.log(strmd5);
pm.environment.set("sign", strmd5); //将加密后的签名设置为环境变量方便后续调用
postman的params中按照如下方式引用
调用成功的话就是下面这个样子

postman(十二):发送携带md5签名、随机数等参数的请求的更多相关文章

  1. SNF开发平台WinForm之十二-发送手机短信功能调用-金笛-SNF快速开发平台3.3-Spring.Net.Framework

    1.调用前组装参数 2.调用发送信息服务脚本   .调用前组装参数: BaseSendTaskEntity entity = new BaseSendTaskEntity(); entity.Mess ...

  2. ASP.NET Core 2.2 基础知识(十二) 发送 HTTP 请求

    可以注册 IHttpClientFactory 并将其用于配置和创建应用中的 HttpClient 实例. 这能带来以下好处: 提供一个中心位置,用于命名和配置逻辑 HttpClient 实例. 例如 ...

  3. postman发送HTTP请求自动生成MD5签名

    POSTMAN是常用的接口测试工具 如何进行MD5签名呢? 代码如下: /** * 通过request.data获取body的内容,这个是postman内置变量 * 常用内置参数如下: * reque ...

  4. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  5. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十二:串口模块① — 发送

    实验十二:串口模块① — 发送 串口固然是典型的实验,想必许多同学已经作烂,不过笔者还要循例介绍一下.我们知道串口有发送与接收之分,实验十二的实验目的就是实现串口发送,然而不同的是 ... 笔者会用另 ...

  6. spring-boot-route(二十二)实现邮件发送功能

    在项目开发中,除了需要短信验证外,有时候为了节省 短信费也会使用邮件发送.在Spring项目中发送邮件需要封装复杂的消息体,不太方便.而在Spring Boot项目中发送邮件就太简单了,下面一起来看看 ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

    紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...

  8. (十二) 一起学 Unix 环境高级编程 (APUE) 之 进程间通信(IPC)

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  9. 《Django By Example》第十二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...

随机推荐

  1. 安装office2010出现的一些问题

    在往新的台式机安装office2010时,因为一些原因没有使用虚拟光驱安装,而是解压后安装,安装过程中提示错误,无法找到excel.zh-cn中的msi文件,但是查看安装目录文件发现是有的. 后续尝试 ...

  2. Linux下修改Mysql密码的三种方式

    前言 有时我们会忘记Mysql的密码,或者想改一个密码,以下将对这两种情况修改密码的三种解决方法做个总结 本文都以用户为 root 为例 一.拥有原来的myql的root的密码 方法一: 在mysql ...

  3. 避免Java中NullPointerException的Java技巧和最佳实践

    Java中的NullPointerException是我们最经常遇到的异常了,那我们到底应该如何在编写代码是防患于未然呢.下面我们就从几个方面来入手,解决这个棘手的​问题吧.​ 值得庆幸的是,通过应用 ...

  4. 轻量级监控平台之java进程监控脚本

    轻量级监控平台之java进程监控脚本 #!/bin/bash #进程监控脚本 #功能需求: 上报机器Java进程的进程ID,对应的端口号service tcp端口号,tomcat http 端口号,以 ...

  5. SynchronusQueue

    /** * 当向SynchronousQueue插入元素时,必须同时有个线程往外取 * SynchronousQueue是没有容量的,这是与其他的阻塞队列不同的地方 */ public class S ...

  6. layui confirm 嵌套使用 (随笔记)

    使用layui confirm时不要使用aspx控件,使用html的button按钮 借用一下 官方例子 layer.confirm('您是如何看待前端开发?', { btn: ['重要', '奇葩' ...

  7. python基础(35):协程

    1. 前言 之前我们学习了线程.进程的概念,了解了在操作系统中进程是资源分配的最小单位,线程是CPU调度的最小单位.按道理来说我们已经算是把cpu的利用率提高很多了.但是我们知道无论是创建多进程还是创 ...

  8. SPA项目开发之首页导航+左侧菜单

    Mock.js: 前后端分离之后,前端迫切需要一种机制,不再需要依赖后端接口开发,而mockjs就可以做到这一点 Mock.js是一个模拟数据的生成器,用来帮助前端调试开发.进行前后端的原型分离以及用 ...

  9. Python笔记:设计模式之代理模式

    代理通常就是一个介于寻求方和提供方之间的中介系统.其核心思想就是客户端(寻求方)没有直接和提供方(真实对象)打交道,而是通过代理对象来完成提供方提供的资源或操作. 代理其实就是封装实际服务对象的包装器 ...

  10. Linux网络——查看网络连接情况的命令

    Linux网络——查看网络连接情况的命令 摘要:本文主要学习了Linux中用来查看网络连接情况的命令. hostname命令 hostname命令用于显示和设置系统的主机名称,设置只是临时生效,永久生 ...