Python中requests,python 接口签名

  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 time

  import 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: