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()


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CtrlCV工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值