python hmac sha1 php hash_hmac,python_seetaaiot hmac-sha1鉴权使用

任务目标:

实现一套seetaaiot鉴权

对request简单封装

封装seetaaiot调用方法

pytest简单使用

*分析一下鉴权规则规则

72a865837125

image.png

首先进行排序,

然后按照顺序拼接用,

再用拼接字符串使用app_key进行hmac-sha1签名,

然后把参数放在一起

Authentica.py

import time as t

import hmac

from hashlib import sha1

import json

import configparser

config = configparser.ConfigParser()

config.read("config.ini", encoding="utf-8")

config.sections()

class auth:

def __init__(self, props):

self.props = props

self.props['timestamp'] = str(int(t.time()))

self.props['app_key'] = config.get("seeta_device_conf", "app_key")

self.props['nonce_str'] = config.get("seeta_device_conf", "nonce_str")

self.seckey = config.get("seeta_device_conf", "seckey")

def hash_hmac(key, code, sha1):

hmac_code = hmac.new(key.encode(), code.encode(), sha1)

return hmac_code.hexdigest()

def param(self):

List = []

#排序

Sort = sorted(self.props.items())

Dict = (dict((x, y) for x, y in Sort))

for k, v in Dict.items():

if isinstance(v, list):

#如果参数为list需要先转成str

v = json.dumps(v)

List.append(str(k) + '=' + str(v))

else:

List.append(str(k) + '=' + str(v))

item = "&".join(List)

print(item)

value = auth.hash_hmac(self.seckey, item, sha1)

self.props['signature'] = value

templ = self.props

# templ = json.dumps(templ)

return templ

if __name__ == '__main__':

pass

*requests封装

分析:seetaaiot使用了四种方法,我们简单封装一下

Requests_Send.py

import requests

import json

from Authentica import auth

class Runmain:

'''

请求地址示例: url = ""

请求方法使用 run = Runmain(url=url, params=None, data=need_data, method='POST')

只支持四种方法delete patch post get

method必须用大写,为get请求时参数化后的参数传入Runmain的params,其他的方法使用data,无参数时需要传入空{}即可

返回结果可以这样看 print(run.response)

'''

def __init__(self, url, data, params, method):

self.response = self.run_main(url, data, params, method)

def send_post(self, url, params, data):

response = requests.post(url=url, data=json.dumps(data))

return response.json()

def send_delete(self, url, params, data):

response = requests.delete(url=url, data=json.dumps(data))

return response.json()

def send_patch(self, url, params, data):

response = requests.patch(url=url, data=json.dumps(data))

return response.json()

def send_get(self, url, params, data):

response = requests.get(url=url, params=params)

return response.json()

def run_main(self, url, data, params, method):

respose = None

if method == 'GET':

respose = self.send_get(url, params, data)

elif method == 'POST':

respose = self.send_post(url, params, data)

elif method == 'PATCH':

respose = self.send_patch(url, params, data)

elif method == 'DELETE':

respose = self.send_delete(url, params, data)

else:

print("method错误")

return respose

if __name__ == '__main__':

pass

*我们封装一下seetaaiot的使用方法

from Authentica import auth

from Requests_Send import Runmain

'''

传入地址及data并根据请求的方法选择,如果是get请求需要传入空字典{}即可

'''

# POST方法

class seeta_aiot:

def __init__(self, url, data):

self.url = url

self.data = data

def aiot_post(self):

props = auth(self.data)

data = props.param()

run = Runmain(url=self.url, params=None, data=data, method='POST')

return run.response

# GET方法

def aiot_get(self):

props = auth(self.data)

data = props.param()

run = Runmain(url=self.url, params=data, data=None, method='GET')

return run.response

# DELETE

def aiot_delete(self):

props = auth(self.data)

data = props.param()

run = Runmain(url=self.url, params=None, data=data, method='DELETE')

return run.response

# PATCH

def aiot_patch(self):

props = auth(self.data)

data = props.param()

run = Runmain(url=self.url, params=None, data=data, method='PATCH')

return run.response

if __name__ == '__main__':

#调用的方法

#url= xxx

#data={}

seeta_aiot(url, data).aiot_get())

下期我们使用一下pytest 做个小练习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值