python_seetaaiot hmac-sha1鑒權(quán)使用

任務(wù)目標(biāo):

  • 實(shí)現(xiàn)一套seetaaiot鑒權(quán)
  • 對(duì)request簡(jiǎn)單封裝
  • 封裝seetaaiot調(diào)用方法
  • pytest簡(jiǎn)單使用

*分析一下鑒權(quán)規(guī)則規(guī)則


image.png
  • 首先進(jìn)行排序,
  • 然后按照順序拼接用疤苹,
  • 再用拼接字符串使用app_key進(jìn)行hmac-sha1簽名,
  • 然后把參數(shù)放在一起
    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):
                #如果參數(shù)為list需要先轉(zhuǎn)成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使用了四種方法哑姚,我們簡(jiǎn)單封裝一下
Requests_Send.py

import requests
import json
from Authentica import auth



class Runmain:
    '''
    請(qǐng)求地址示例:    url = ""
    請(qǐng)求方法使用      run = Runmain(url=url, params=None, data=need_data, method='POST')
    只支持四種方法delete patch post get
    method必須用大寫,為get請(qǐng)求時(shí)參數(shù)化后的參數(shù)傳入Runmain的params芜茵,其他的方法使用data叙量,無參數(shù)時(shí)需要傳入空{(diào)}即可
    返回結(jié)果可以這樣看                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錯(cuò)誤")

        return respose


if __name__ == '__main__':
    pass

*我們封裝一下seetaaiot的使用方法

from Authentica import auth
from Requests_Send import Runmain

'''
傳入地址及data并根據(jù)請(qǐng)求的方法選擇,如果是get請(qǐng)求需要傳入空字典{}即可

'''


# 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__':
    #調(diào)用的方法
    #url= xxx
    #data={}
    seeta_aiot(url, data).aiot_get())



下期我們使用一下pytest 做個(gè)小練習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末九串,一起剝皮案震驚了整個(gè)濱河市绞佩,隨后出現(xiàn)的幾起案子寺鸥,更是在濱河造成了極大的恐慌,老刑警劉巖品山,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胆建,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肘交,警方通過查閱死者的電腦和手機(jī)笆载,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酸些,“玉大人宰译,你說我怎么就攤上這事檐蚜∑嵌” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵闯第,是天一觀的道長(zhǎng)市栗。 經(jīng)常有香客問我,道長(zhǎng)咳短,這世上最難降的妖魔是什么填帽? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮咙好,結(jié)果婚禮上篡腌,老公的妹妹穿的比我還像新娘。我一直安慰自己勾效,他們只是感情好嘹悼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著层宫,像睡著了一般杨伙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萌腿,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天限匣,我揣著相機(jī)與錄音,去河邊找鬼毁菱。 笑死米死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贮庞。 我是一名探鬼主播哲身,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贸伐!你這毒婦竟也來了勘天?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脯丝,沒想到半個(gè)月后商膊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宠进,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年晕拆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片材蹬。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡实幕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出堤器,到底是詐尸還是另有隱情昆庇,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布闸溃,位于F島的核電站整吆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏辉川。R本人自食惡果不足惜表蝙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乓旗。 院中可真熱鬧府蛇,春花似錦、人聲如沸屿愚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渺鹦。三九已至扰法,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間毅厚,已是汗流浹背塞颁。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吸耿,地道東北人祠锣。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像咽安,于是被迫代替她去往敵國(guó)和親伴网。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容