python接口自动化 - 接口签名处理
前言:
服务端与客户端进行http通讯时,为了防止被爬虫,数据安全性等,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回。
常见的是:
- 引入 sign 签名
- 常见的加密方案有AES加密,RSA加密,MD5加密等。
由于引入签名sign请求头,我们在测APP接口的时候,不填签名数据的话,都会被服务端加密签名校验所拦截,这对我们测接口造成了极大的困扰。也就是说,没有处理好签名,就不能进行下一步。
鉴权失败:
请求加密:
响应加密:
解决方案:
- 让开发在测试环境关闭签名验证(一杯奶茶试试,但是基本开发也不会这样搞,测试环境关闭签名,有可能上线部署忘记打开签名,造成极大影响);
- 通过抓包把请求的请求头和请求参数抓下来,通过postman或者jmeter测试(每次抓包,参数都是固定,但是签名随着请求参数变化而变化,每请求一次就就要抓包一次,也难搞。有时候页面没出来,包也抓不了);
- 询问开发具体的加密过程,复写一套加密算法,自己生成加密数据(过程有可能比较复杂,但是如果你跟开发关系好就不复杂,或者你直接看开发代码,加密,解密算法自己整一套);
但是大部分时候问题往往会往最困难的方向走
以下的 sign 签名处理的例子:
import hashlib
import base64
key = '12345678900'
class Sign:
@classmethod
def get_sign(cls, data):
# 不改变传入的data=>直接对字典进行复制
data = data.copy()
# 首先判断字典是否空,为空直接加密
if not data:
string = ''
else:
# 非空字典,过滤value为空和嵌套字典、列表
for k, v in list(data.items()):
if isinstance(v,str):
v = v.replace(" ", "").replace("\n", "")
data[k] = v
if v == ''or v is None or isinstance(v,(dict,list)):
data.pop(k)
# 对字典进行ASCII码排序
new_list = sorted(data.items())
alist = ['&' + str(i[0]) + '=' + str(i[1]) for i in new_list]
string = ''.join(alist)
return {"X-Sign": cls.encry(string)}
@classmethod
def encry(cls, string):
"""
加密算法
:param string: 要加密的字符串
:return: 字符串
"""
if string:
sign = string[1:] + '&key=' + key
else:
sign = 'key=' + key
m = hashlib.md5()
m.update(sign.encode("utf8"))
encodeStr = m.hexdigest()
base_code = base64.b64encode(encodeStr.encode('utf-8'))
return base_code.decode()
if __name__ == '__main__':
body = {"X-Sign": ""}
sign_data = Sign.get_sign(body)
print(sign_data)
# 结果
# {'X-Sign': 'OTg2ZmUxYmUwYWNlY2QyODYyOTNiNzA2NGMxYzUxZjE='}
api集成
你可以将生成加密数据做成一个api提供给小伙伴使用,传入待加密的请求报文,返回加密数据,其他同学复制粘贴加密数据到请求头,即可完成接口测试。
jmeter集成
因为jmeter里面的beanshell用的是Java语法,可以直接喊开发(Java后端或者Android开发)直接帮你打个jar包,直接调用即可(一杯奶茶就好了,不行就两杯。)
import com.xxx.xxxx.Sign;
String SamplerData=prev.getSamplerData();
String signData = Sign.getSign(SamplerData);
log.info("签名数据是"+signData);
分类:
python接口自动化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2017-08-18 cpu高的问题的快速定位