千家信息网

python3中怎么使用Requests测试带签名的接口

发表于:2024-10-23 作者:千家信息网编辑
千家信息网最后更新 2024年10月23日,今天小编给大家分享一下python3中怎么使用Requests测试带签名的接口的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文
千家信息网最后更新 2024年10月23日python3中怎么使用Requests测试带签名的接口

今天小编给大家分享一下python3中怎么使用Requests测试带签名的接口的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

使用Requests测试带签名的接口

部分业务为了安全需要,需要对接口请求数据做签名校验,

一般制定一下规则

1、业务方接入系统,需申请业务ID以及加密秘钥,二者成对出现,并且为面向服务端的,不能在前端或者客户端传递。

2、所有值非空的参数必须参与签名

3、签名算法:

a. 对所有参数按参数名的字典升序排序

b. 将所有排好序的参数按照key1=value1&key2=value2&key3=value......的格式拼接成一个字符串,记为signStr

c. 在signStr后,继续添加 &key=加密密钥

d. 对signStr进行MD5签名

针对某一get接口做实例说明

#!/usr/bin/env python#coding:utf-8import hashlibimport jsonimport requests #测试的域名domain= "http://******/***/vip2.ldo?"#get 传递的非sign参数url_params = {    'type':'orderList',    'userId':'198049148',    'country':86,    'typeGroup':'',    'status':'',    'rows':'20',    'page':'1',    'businessId':'2',}sign ="sign=###################"#删除空值的参数,以用来签名for key in list(url_params.keys()):    if not url_params.get(key):        del url_params[key] #按照升序排列,得到的是一个列表,列表的元素为元组       url_params1 = sorted(url_params.items(),key=lambda d:d[0], reverse=False) values =[]for li in url_params1:    newsmbol =('=',)    #元组中增加一个新元素    li = li[:1]+newsmbol+li[1:]    #元组转化为字符串,整型不能转化,list包含数字,不能直接转化成字符串    value = "".join('%s' %id for id in li)    values.append(value)#列表复制不能用= 需要用copy 或者list[:]values1 = values[:]values1.append(sign)sign1 = "&".join(values1)#md5 调用库函数sign2 = hashlib.md5(sign1.encode('utf-8')).hexdigest()sign = 'sign='+sign2values.append(sign)para = "&".join(values)url = domain+ paraprint(url) res = requests.get(url)print('***---***---***')print(res.content)print('***---***---***')print(res.headers)print('***---***---***')print(res.status_code)if res.status_code == 200:    print('请求成功')print('***---***---***')#json 格式打印print(json.dumps(res.json(),indent=4))print('***---***---***')#两种方法if json.loads(res.text)['msg']=='success':    print('True')else:    print('error')if res.json()['msg']=='success':    print('True')else:    print('error')

在for循环中,相当于对链表的操作,它会自动调用next方法! 字典的迭代器会遍历它的键,在这个过程中,

不能改变这个字典!不能删除、添加数据 要先记录要删除的元素的索引,遍历完后再删除,url_params.keys()在python2中

是一个独立的列表,python3中是迭代器,需要我们list转换生成一个独立的列表。

for key in list(url_params.keys()):    if not url_params.get(key):        del url_params[key]

使用内置的sorted()函数可以将字典按照键或者值来进行升序或者降序的排列,其排序结果,将字典转化为一个列表,其中字典的元素变为了一个元组。

按照键 升序

url_params1 = sorted(url_params.items(),key=lambda d:d[0], reverse=False)

按照值 倒叙

url_params1 = sorted(url_params.items(),key=lambda d:d[1], reverse=True)

Python 签名接口测试

在之前的随笔中,我们已经学过了如何使用使用JMeter和Postman实现sign签名接口校验的接口测试,今天我们来学习一下如何写Python脚本实现签名接口的接口测试。

签名接口

地址:http://localhost:8080/pinter/com/userInfo

参数为:

{"phoneNum":"123434","optCode":"testfan","timestamp":"1211212","sign":"fdsfdsaafsasfas"}

其中,sign字段是按照特定算法进行加密后的数据

本接口的签名算法为 sign=Md5(phoneNum+ optCode+ timestamp)

代码如下

import timeimport randomimport hashlibimport requestsimport json#1.生成5位随机数phone=random.randint(10000,99999)#2.生成13位数字的时间戳timeStamp=int(round(time.time()*1000))print(timeStamp)optCode="testfan"#3.随机数和时间戳拼接t=str(phone+timeStamp)#4.sign=随机数phoneNum+optCodesign=t+optCode#5.实例化一个md5对象md5=hashlib.md5()#6.sign字段进行md5加密md5.update(sign.encode("utf-8"))print(md5.hexdigest()) def md5_sign():   url ="http://localhost:8080/pinter/com/userInfo"   header={"Content-Type":"application/json" }   body={"phoneNum":phone,"optCode":"testfan","timestamp":timeStamp,"sign":md5.hexdigest()}   respon = requests.post(url=url, headers=header,data=body)   return respon.json() if __name__ == '__main__':      print(md5_sign())

以上就是"python3中怎么使用Requests测试带签名的接口"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

接口 测试 参数 字典 元素 升序 知识 篇文章 加密 业务 字符 字符串 数据 算法 随机数 生成 内容 函数 字段 实例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 珠海安卓软件开发常见问题 手机游戏的服务器在什么地方 我的世界怎么弄西瓜视频服务器 想学数据库难吗 国际五大科技互联网公司 海珠区无源网络技术开发服务标准 重庆市诺派创网络技术服务 sql数据库保存的密码怎么查看 c 文件数据库 采集服务器招标参数 软件开发工程师工作辛苦吗 江西软件开发专业的大专 电脑数据库是啥东西 赛迪院长评价网络安全 软件开发 效率性 温州通信网络技术服务 软件开发什么资源最重要 网络安全视图安全教育手抄报 计算机专业网络技术学什么 荆州好的软件开发企业 ftp管理云服务器 网络安全基本题目 saas软件开发什么类型的好 NHANES数据库在易尔上加权 鸡泽软件开发有限公司 求生之路2建房找不到服务器 数据库中有关er图的题 软件定义网络技术黄辉百度云 mysql数据库外键和事务的 网络安全的发展趋势是
0