Python中requests,python 接口签名
本文主要介绍python3如何使用请求测试签名接口,有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。
00-1010使用请求测试签名的接口。一般制定一些规则。以get接口为例,说明Python签名接口测试签名接口代码如下
目录
部分业务需要检查接口请求数据的签名是否安全,
使用Requests测试带签名的接口
1.业务方访问系统需要申请业务ID和加密密钥,业务ID和加密密钥成对出现,面向服务器,不能在前端或客户端传输。
2.所有具有非空值的参数都必须有符号。
3.签名算法:
A.根据参数名称的字典,以升序对所有参数进行排序
B.按照key 1=value 1 key 2=value 2 key 3=value的格式将所有有序参数拼接成一个字符串.并将其记录为signStr。
C.在signStr之后,继续添加key=加密密钥
D.用MD5签署signStr
一般制定一下规则
#!/usr/bin/env python # coding : utf-8
导入hashlib
导入json
导入请求
#经过测试的域名
domain= http://* * * * * */* * */VIP 2 . LDO?
#get传递的#非符号参数
url_params={
键入 : 订单列表,
用户标识 :198049148 ,
国家 :86,
键入组 : ,
状态 : ,
行数 :20 ,
第 :1 页:
businessId:2 :
}
sign=sign=###############
#删除用于签名的空参数。
对于列表中的键(url_params.keys()):
如果不是url_params.get(key):
del url_params[key]
#按升序排列,得到一个列表,列表的元素是元组。
URL _ params 1=sorted(URL _ params . items(),key=lambda d:d[0],reverse=False)
值=[]
对于url_params1:中的李
newsmbol=(=,)
#向元组添加新元素
李,李
#元组转换为字符串,整数不能转换,list包含数字,不能直接转换为字符串。
值=“”。联接(li中id的%s %id)
values.append(值)
#不能使用列表副本=需要副本或列表[:]
values1=值[:]
values1.append(符号)
sign1=“”。连接(值1)
#md5调用库函数
sign 2=hashlib . MD5(sign 1 . encode( utf-8 ))。hexdigest()
符号=符号=符号2
values.append(符号)
para=“”。联接(值)
url=域参数
打印(url)
res=requests.get(url)
打印( *** - *** - *** )
打印(内容)
打印( *** - *** - *** )
打印(资源标题)
打印( *** - *** - *** )
打印(资源状态代码)
如果资源状态代码==200:
打印(“请求成功”)
打印( *** - *** - *** )
#json格式打印
print(json.dumps(res.json(),indent=4))
打印( *** - *** - *** )
#两种方法
如果json.loads(res.t
ext)[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 random
import hashlib
import requests
import 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+optCode
sign=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())
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。