Jmeter调用python程序的MD5摘要信息算法导致接口一直签名失败

2022年9月23日更新,这个问题终于找到了原因:暂时发现以下几种原因都会导致验证失败:

1、python的使用json.dumps()转换为json字符格式后,逗号、冒号后面默认是会有一个空格的,这时候如果在jmeter请求中没有补上空格,那么就会导致验签失败。

可以通过入参去掉空格:

import json

data = {'token':'e5dads5 3455s2','verify':True,'content':'中文'}
data_json = json.dumps(data,separators=(',',':'))  # 将,:后面的空格去掉
print(data_json)
#输出:{"token":"e5dads5 3455s2","verify":true,"content":"\u4e2d\u6587"}

 补上空格后,验签通过,接口下单成功:

 (建议直接把格式化后的参数传给接口使用)

2、beanshell(java)脚本中,拼接的参数是无序存放的,最后post请求传请求参数的时候,一定要按照这个拼接后的顺序去传参,不然就会报无效的签名。

3、字符串中含有中文,编码方式不一致时,也可能导致签名验证失败,给含中文的字符串加上编码方式。(详见https://www.cnblogs.com/eagleking/p/16047927.html

String body = URLEncoder.encode(bodyin, "utf-8"); //参数bodyin增加编码方式,避免因为字符串含中文而验签失败

问题描述:需要调用python的脚本对请求头里的一个签名字符串进行MD5加密,不管是使用【OS进程取样器】还是使用【Beanshell取样器】调用python程序,而且也尝试过了通过jmeter生成时间戳和python脚本生成时间戳,但最后接口请求的时候都包签名失败,调试几天都没查出原因所在。如下图所示:

 

 解决方案:弃用调用python脚本进行md5加密的情况,直接使用jmeter内置脚本digest函数进行md5加密。可以查看本人写的另一帖子:Jmeter内置函数使用之调用摘要函数(digest)进行加密_Jarthong的博客-CSDN博客 

另外:调用python脚本进行非对称加密在传回给jmeter接口,在http请求不需要请求头时,是正常可以用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值