postman(十二):发送携带md5签名、随机数等参数的请求

本文详细介绍了如何在Postman中自动生成随机数、MD5签名,并将其应用于接口调用,以百度翻译API为例,讲解了签名生成及请求参数处理的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想起来之前在借助百度翻译接口做翻译小工具的时候,需要把参数进行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中按照如下方式引用
调用成功的话就是下面这个样子

 

转载于:https://www.cnblogs.com/hanmk/p/11093109.html

官方文档:其实在几个月之前我就开始关注它,而且小程序发布那天是9号,那时候我正好考试,因为小程序是新事物,当时我真的有点忍不住,但是又要复习考试,所以很不爽,放假之后我就开始看微信小程序的官方文档 通俗易懂很不错。个人推荐想学习小程序的就按照这份官方文档按顺序看吧,其它比如掘金或者w3school也有,但是这毕竟是官方的,比较权威。语言是基于es6,注意这里使用的wxml,wxss,是是对应html和css的,wxml跟html语法上相似,wxss语法就是跟css一样。注意事项:首先开发小程序是需要一个APPID的这个在教程官方文档里面的官方文档里面会说到,但是这个微信小程序表面上是必须具有个体户工商营业执照或者企业营业执照才可以注册的,但是像我这种穷学生要是想学一下小程序怎么办呢?这时候你需要这个 我就是像这样申请一个小程序账号,得到一个APPID,注意不需要搞这个微信认证的,这个专空子申请的APPID只可以用来开发,是没办法拿来发布小程序的,认证也是认证不了的 在小程序里面的wx.reques函数在是用来向你的后端服务器发出请求的wx.request({   url: 'test.php', //仅为示例,并非真实的接口地址   data: {      x: '' ,      y: ''   },   header: {       'content-type': 'application/json'   },   success: function(res) {     console.log(res.data)   } })注意这个函数的url必须是https,这是除了看文档之外我花费时间最多的地方接上面讲https这个真的浪费我很多时间,我的后端是在我的腾讯云服务器使用nodejs语言搭建的server,因为小程序必须的request的url必须是https这就需要你的服务器具有ssl证书。如果你使用的腾讯云服务器的话,登录你的腾讯云服务器云主机,在上面的ssl证书管理那里你会看到这个: 你需要申请证书,按照指引走就行,申请之后就会看到截图那样的证书申请好在那里了,下载之后会发现主要有三部分:Apache, Nginx, IIS: 注意:证书的安装腾讯云的文档不是说的太明白,我当时就是搞得一脸懵逼。因为我的的服务端是用nodejs写的,所以需要安装Nginx服务器(涉及Nginx反向代理nodejs项目),Nginx的安装教程安装之后你就可以使用http://yourDomainName yourDomainName是你的域名(没有域名的话需要自己申请一个,在腾讯云上有得买,加上优惠券还是挺便宜的,但是之后几年的价格怎样不知道,想要免费的域名也可以,可以自行谷歌百度搜素一下就行) 来访问你的服务器的了(默认是80端口),然后安装Nginx证书,教程安装好ssl证书之后,你就可以适应https://yourDomainName 来访问你的服务器接着就是使用你的Nginx服务器来代理你作为微信小程序后端的nodejs项目了先说说使用Nginx反向代理nodejs项目是什么意思Nginx是安装在你服务器里面,他可以占据着一个端口,比如443,然后你运行你的nodejs项目,让它在3000端口跑,这时候你让Nginx代理,让别人访问你服务器443端口的时候,转而自动访问你nodejs所在3000端口,这就是使用Nginx反向代理nodejs项目 教程 核心部分如下(下图源自Nginx的nginx.conf配置文件):我的小程序使用: 下载本项目到本地或者你的服务器,进入server文件夹,输入npm install安装依赖,等待安装完成输入npm start启动后端脚本,app文件夹使用微信开发工具打开,把pages文件夹内index.js中的wx.request中的url改为你的服务器域名或者ip地址(真机测试必须是https访问,这就是上面我煞费口舌说https的原因),也可以本地调试的话应该可以改为:localhost:端口我做的这个小程序是一个翻译助手,非常简单,微信的api我只是使用wx.request和onShareAppMessage两个重要的官方api函数,至于逻辑那些只能自己写小程序部分在这个项目的app文件夹里面,可以下载到本地,使用微信开发工具打开这个名为app的文件夹就可以打开我的这个小程序啦这个小程序,部署在我的腾讯云服务器里面,在3000端口跑,用Nginx在443端口进行代理,在server文件夹内的server.js负责接收小程序发送过来的请求,并且使用translate.js里面的函数进行翻译,最后把结果反馈给小程序。translate.js里面使用百度翻译的api,主要使用http.request()函数,百度翻译的api很好用,很喜欢。核心代码module.exports = function(params, callback) {    if (typeof params === 'string') {      params = {        query: params      };    }    params = {      from: params.from || 'zh',      to: params.to || 'en',      query: params.query || ''    };    var data = querystring.stringify(params);      options = {        host: 'fanyi.baidu.com',        port: 80,        path: '/v2transapi',        method: 'POST',        headers: {          'Content-Type':'application/x-www-form-urlencoded',          'Content-Length': data.length        }      };    var req = http.request(options, function(res) {      var result = '';      res.setEncoding('utf8');      res.on('data', function(data) {        result  = data;      });      res.on('end', function() {      //console.log(result);       var obj = JSON.parse(result);       console.log(obj);       var str = obj.trans_result.data[0].dst;        callback(str);      });    });    req.on('error', function(err) {      console.log(err);      setTimeout(function() {        translation(query, callback);      }, 3000);    });    req.write(data);    req.end();  };params = {     from: params.from || 'zh', //原来是什么语言                    to: params.to || 'en', //要翻译为什么语言             query: params.query || ''  //要翻译的语句  };使用百度翻译的api,必须知道每种语言,百度翻译使用什么单词表示的: 解决语音问题:这是百度翻译女声语音的url,喜欢的朋友可以收藏,以后可能用得上 注意里面有两个参数,一个是lan意思是要读出出来的是什么语言,zh是中文,en是英文,很遗憾,这个url这可以播报中文和英文的语音,其他的小语种不可以这也是我的小程序只可以有中文和英文两种语言的语音的原因,第二个参数是text就是要播报的文本是什么效果图如下:foreverforever是可以让nodejs项目在后台运行的,只需要npm install forever一下就可以使用forever start server.js来运行你的expres项目,简单好用,当你想停止下来debug的时候就forever stop server.js一下就行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值