您好,登錄后才能下訂單哦!
今天小編給大家分享一下python3中怎么使用Requests測試帶簽名的接口的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
部分業(yè)務(wù)為了安全需要,需要對接口請求數(shù)據(jù)做簽名校驗,
1、業(yè)務(wù)方接入系統(tǒng),需申請業(yè)務(wù)ID以及加密秘鑰,二者成對出現(xiàn),并且為面向服務(wù)端的,不能在前端或者客戶端傳遞。
2、所有值非空的參數(shù)必須參與簽名
3、簽名算法:
a. 對所有參數(shù)按參數(shù)名的字典升序排序
b. 將所有排好序的參數(shù)按照key1=value1&key2=value2&key3=value......的格式拼接成一個字符串,記為signStr
c. 在signStr后,繼續(xù)添加 &key=加密密鑰
d. 對signStr進行MD5簽名
#!/usr/bin/env python#coding:utf-8 import hashlib import json import requests #測試的域名 domain= "http://******/***/vip2.ldo?" #get 傳遞的非sign參數(shù) url_params = { 'type':'orderList', 'userId':'198049148', 'country':86, 'typeGroup':'', 'status':'', 'rows':'20', 'page':'1', 'businessId':'2', } sign ="sign=###################" #刪除空值的參數(shù),以用來簽名 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:] #元組轉(zhuǎn)化為字符串,整型不能轉(zhuǎn)化,list包含數(shù)字,不能直接轉(zhuǎn)化成字符串 value = "".join('%s' %id for id in li) values.append(value) #列表復制不能用= 需要用copy 或者list[:] values1 = values[:] values1.append(sign) sign1 = "&".join(values1) #md5 調(diào)用庫函數(shù) sign2 = hashlib.md5(sign1.encode('utf-8')).hexdigest() sign = 'sign='+sign2 values.append(sign) para = "&".join(values) url = domain+ para print(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循環(huán)中,相當于對鏈表的操作,它會自動調(diào)用next方法! 字典的迭代器會遍歷它的鍵,在這個過程中,
不能改變這個字典!不能刪除、添加數(shù)據(jù) 要先記錄要刪除的元素的索引,遍歷完后再刪除,url_params.keys()在python2中
是一個獨立的列表,python3中是迭代器,需要我們list轉(zhuǎn)換生成一個獨立的列表。
for key in list(url_params.keys()): if not url_params.get(key): del url_params[key]
使用內(nèi)置的sorted()函數(shù)可以將字典按照鍵或者值來進行升序或者降序的排列,其排序結(jié)果,將字典轉(zhuǎn)化為一個列表,其中字典的元素變?yōu)榱艘粋€元組。
按照鍵 升序
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)
在之前的隨筆中,我們已經(jīng)學過了如何使用使用JMeter和Postman實現(xiàn)sign簽名接口校驗的接口測試,今天我們來學習一下如何寫Python腳本實現(xiàn)簽名接口的接口測試。
地址:http://localhost:8080/pinter/com/userInfo
參數(shù)為:
{"phoneNum":"123434","optCode":"testfan","timestamp":"1211212","sign":"fdsfdsaafsasfas"}
其中,sign字段是按照特定算法進行加密后的數(shù)據(jù)
本接口的簽名算法為 sign=Md5(phoneNum+ optCode+ timestamp)
import time import random import hashlib import requests import json #1.生成5位隨機數(shù) phone=random.randint(10000,99999) #2.生成13位數(shù)字的時間戳 timeStamp=int(round(time.time()*1000)) print(timeStamp) optCode="testfan" #3.隨機數(shù)和時間戳拼接 t=str(phone+timeStamp) #4.sign=隨機數(shù)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())
以上就是“python3中怎么使用Requests測試帶簽名的接口”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。