当前位置 博文首页 > 小白的成长记录: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()
cs