欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3如何使用Requests測(cè)試帶簽名的接口

 更新時(shí)間:2022年02月12日 10:38:21   作者:qianmo0417  
這篇文章主要介紹了python3如何使用Requests測(cè)試帶簽名的接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用Requests測(cè)試帶簽名的接口

部分業(yè)務(wù)為了安全需要,需要對(duì)接口請(qǐng)求數(shù)據(jù)做簽名校驗(yàn),

一般制定一下規(guī)則

1、業(yè)務(wù)方接入系統(tǒng),需申請(qǐng)業(yè)務(wù)ID以及加密秘鑰,二者成對(duì)出現(xiàn),并且為面向服務(wù)端的,不能在前端或者客戶端傳遞。

2、所有值非空的參數(shù)必須參與簽名

3、簽名算法:

a. 對(duì)所有參數(shù)按參數(shù)名的字典升序排序

b. 將所有排好序的參數(shù)按照key1=value1&key2=value2&key3=value......的格式拼接成一個(gè)字符串,記為signStr

c. 在signStr后,繼續(xù)添加 &key=加密密鑰

d. 對(duì)signStr進(jìn)行MD5簽名

針對(duì)某一get接口做實(shí)例說明

#!/usr/bin/env python#coding:utf-8
import hashlib
import json
import requests
 
#測(cè)試的域名
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]
 #按照升序排列,得到的是一個(gè)列表,列表的元素為元組       
url_params1 = sorted(url_params.items(),key=lambda d:d[0], reverse=False)
 
values =[]
for li in url_params1:
    newsmbol =('=',)
    #元組中增加一個(gè)新元素
    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)
#列表復(fù)制不能用= 需要用copy 或者list[:]
values1 = values[:]
values1.append(sign)
sign1 = "&".join(values1)
#md5 調(diào)用庫(kù)函數(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('請(qǐng)求成功')
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)中,相當(dāng)于對(duì)鏈表的操作,它會(huì)自動(dòng)調(diào)用next方法! 字典的迭代器會(huì)遍歷它的鍵,在這個(gè)過程中,

不能改變這個(gè)字典!不能刪除、添加數(shù)據(jù) 要先記錄要?jiǎng)h除的元素的索引,遍歷完后再刪除,url_params.keys()在python2中

是一個(gè)獨(dú)立的列表,python3中是迭代器,需要我們list轉(zhuǎn)換生成一個(gè)獨(dú)立的列表。

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

使用內(nèi)置的sorted()函數(shù)可以將字典按照鍵或者值來進(jìn)行升序或者降序的排列,其排序結(jié)果,將字典轉(zhuǎn)化為一個(gè)列表,其中字典的元素變?yōu)榱艘粋€(gè)元組。

按照鍵 升序

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 簽名接口測(cè)試

在之前的隨筆中,我們已經(jīng)學(xué)過了如何使用使用JMeter和Postman實(shí)現(xiàn)sign簽名接口校驗(yàn)的接口測(cè)試,今天我們來學(xué)習(xí)一下如何寫Python腳本實(shí)現(xiàn)簽名接口的接口測(cè)試。

簽名接口

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

參數(shù)為:

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

其中,sign字段是按照特定算法進(jìn)行加密后的數(shù)據(jù)

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

代碼如下

import time
import random
import hashlib
import requests
import json
#1.生成5位隨機(jī)數(shù)
phone=random.randint(10000,99999)
#2.生成13位數(shù)字的時(shí)間戳
timeStamp=int(round(time.time()*1000))
print(timeStamp)
optCode="testfan"
#3.隨機(jī)數(shù)和時(shí)間戳拼接
t=str(phone+timeStamp)
#4.sign=隨機(jī)數(shù)phoneNum+optCode
sign=t+optCode
#5.實(shí)例化一個(gè)md5對(duì)象
md5=hashlib.md5()
#6.sign字段進(jìn)行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())

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python爬蟲http代理使用方法

    python爬蟲http代理使用方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲http代理使用方法相關(guān)內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-09-09
  • Python元組的定義及使用

    Python元組的定義及使用

    這篇文章主要介紹了Python元組的定義及使用,在Python中元組是一個(gè)和列表非常類似的數(shù)據(jù)類型,不同之處就是列表中的元素可以修改,而元組之中的元素不可以修改。想具體了解的下小伙伴請(qǐng)參考下面文章的具體內(nèi)容,希望對(duì)你有所幫助
    2021-11-11
  • python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)器的方法

    python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)器的方法

    這篇文章主要介紹了python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)器的方法,涉及Python實(shí)現(xiàn)端口轉(zhuǎn)發(fā)的技巧,支持TCP和UDP協(xié)議,需要的朋友可以參考下
    2015-03-03
  • django數(shù)據(jù)模型(Model)的字段類型解析

    django數(shù)據(jù)模型(Model)的字段類型解析

    這篇文章主要介紹了django數(shù)據(jù)模型(Model)的字段類型,文中給大家提到了django數(shù)據(jù)模型on_delete, db_constraint的使用,需要的朋友可以參考下
    2019-12-12
  • PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn)

    PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn)

    在PyQt6中,滑塊是常用的用戶界面元素之一,用于選擇數(shù)值范圍,本文主要介紹了PyQt6中自定義浮點(diǎn)型滑塊類的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Python celery原理及運(yùn)行流程解析

    Python celery原理及運(yùn)行流程解析

    這篇文章主要介紹了Python celery原理及運(yùn)行流程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • PyTorch的Debug指南

    PyTorch的Debug指南

    這篇文章主要介紹了PyTorch的Debug的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用PyTorch,感興趣的朋友可以了解下
    2021-05-05
  • Python操作PostgreSQL數(shù)據(jù)庫(kù)的基本方法(增刪改查)

    Python操作PostgreSQL數(shù)據(jù)庫(kù)的基本方法(增刪改查)

    PostgreSQL數(shù)據(jù)庫(kù)是最常用的關(guān)系型數(shù)據(jù)庫(kù)之一,最吸引人的一點(diǎn)是它作為開源數(shù)據(jù)庫(kù)且具有可拓展性,能夠提供豐富的應(yīng)用,這篇文章主要給大家介紹了關(guān)于Python操作PostgreSQL數(shù)據(jù)庫(kù)的基本方法,文中介紹了連接PostgreSQL數(shù)據(jù)庫(kù),以及增刪改查,需要的朋友可以參考下
    2023-09-09
  • Python中Random和Math模塊學(xué)習(xí)筆記

    Python中Random和Math模塊學(xué)習(xí)筆記

    這篇文章主要介紹了Python中Random和Math模塊學(xué)習(xí)筆記,本文講解了math模塊的數(shù)學(xué)常量、常用簡(jiǎn)單函數(shù)、三角函數(shù)等,講解了random模塊的常用函數(shù)、隨機(jī)挑選和排序等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Python微信公眾號(hào)開發(fā)平臺(tái)

    Python微信公眾號(hào)開發(fā)平臺(tái)

    這篇文章主要介紹了Python微信公眾號(hào)開發(fā)平臺(tái),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-01-01

最新評(píng)論