python 腾讯云API 请求签名 实例(DNS)

在此记录一下获取请求签名及请求接口的认证方式 ,官方给出的代码示例实在难以理解

# -*- coding: utf-8 -*-
import requests
import hashlib
import base64
import random
import time
import hmac


class QcloudAPI:
    def __init__(self, params):
        self.params = params
        self.methed = 'POST'
        self.src = 'cns.api.qcloud.com/v2/index.php'
        self.url = 'https://cns.api.qcloud.com/v2/index.php'
        self.secret_id = 'AKIDSl8GAoEZbXXXXXXXXXX'
        self.secret_key = 'XigNpZFKAkRwXXXXXXXXXX'

    @staticmethod
    def hmac_sha1_base64(txt, key):
        """
        :param txt: 需要加密的字符串
        :param key: The starting key for the hash.
        :return: 经过sha1加密并转换为base64编码的数据
        """
        key = key.encode(encoding='utf-8')
        txt = txt.encode(encoding='utf-8')
        code = hmac.new(key, txt, digestmod=hashlib.sha1).digest()
        return base64.b64encode(code)

    def auth(self):
        """
        :return: 包含签名认证的数据
        """
        public_args = {  # 公共请求参数
            'SecretId': self.secret_id,
            'Nonce': random.randint(1, 100000),
            'Timestamp': int(time.time()),
        }
        data = dict(public_args, **self.params)  # 整合公共请求参数和接口请求参数
        base = sorted(data.items(), key=lambda d: d[0])  # 把参数名按照字母排序
        sign = ''.join([self.methed, self.src, '?', '&'.join([f'{k}={v}' for k, v in base])])
        data['Signature'] = self.hmac_sha1_base64(sign, self.secret_key)
        return data


def main():
    params = {'Action': 'RecordList', 'domain': 'mizhiweixiao.cn'}  # 接口请求参数
    api = QcloudAPI(params)
    data = api.auth()
    response = requests.post(api.url, data=data)
    print(response.json() if response.ok else response.text)


if __name__ == '__main__':
    main()


你可能感兴趣的:(开发,python,腾讯云)