美文网首页
python_seetaaiot hmac-sha1鉴权使用

python_seetaaiot hmac-sha1鉴权使用

作者: 铁甲依然在人间 | 来源:发表于2021-01-04 15:22 被阅读0次

任务目标:

  • 实现一套seetaaiot鉴权
  • 对request简单封装
  • 封装seetaaiot调用方法
  • pytest简单使用

*分析一下鉴权规则规则


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 做个小练习

相关文章

  • python_seetaaiot hmac-sha1鉴权使用

    任务目标: 实现一套seetaaiot鉴权 对request简单封装 封装seetaaiot调用方法 pytest...

  • 鉴权token和refresh_token

    每次访问鉴权使用token,token使用aes对称加密,鉴权时直接解密得到uid,无需访问数据库验证,鉴权tok...

  • 鉴权和权限管理的探索

    传统鉴权方案是通过Session ID完成的,现在一般使用Token鉴权。 1.认证与鉴权 分布式session ...

  • basic auth和digest auth比较

    经常看到接口请求中,有如下的鉴权使用方式 #发送get请求,加鉴权--BasicAuth fromrequests...

  • iOS 开发中遇到的坑

    1.使用百度地图报BMK_SEARCH_PERMISSION_UNFINISHED(还未完成鉴权,请在鉴权通过后重...

  • 谈谈鉴权与授权

    目录 鉴权场景实现 授权场景实现 鉴权 鉴权(authentication): 你是谁 场景 实现 关于鉴权的示例...

  • jenkins API对接

    鉴权jenkins使用Basic64鉴权header的格式为 2.带参数调用流水线。调用成功后,jenkins 会...

  • 离线词典

    鉴权逻辑 给特定的apikey授权后,才可使用。 ①没有鉴权成功的apikey ②已授权但过有效期的apikey ...

  • 常见的鉴权方式,你真的不想知道吗

    主要内容 鉴权的作用 几种常见的鉴权 各个鉴权的适用场景 一、什么是鉴权 鉴权是指验证用户是否有权利访问系统的行为...

  • 云调用,小程序鉴权-方案

    目录:一、无处不在的鉴权 现实生活中的身份鉴权方法 简单的密码鉴权体系二、鉴权优化 频繁的鉴权场景下的优化方案 第...

网友评论

      本文标题:python_seetaaiot hmac-sha1鉴权使用

      本文链接:https://www.haomeiwen.com/subject/hdliwktx.html