Python3 Post 请求签名示例
更新时间:2024-12-10 11:03:08
PDF
说明
本文为 Python3 语言的 Post 类型请求示例。以下示例中,需要根据实际情况修改的参数有。
-
根据实际的 API 秘钥修改
access_key_id
与secret_access_key
。 -
根据实际的 API 指令修改
action
参数。 -
根据实际的资源区域修改
zone
参数。 -
根据
action
参数值来填写相应指令的参数。
示例
-
代码示例
#!/usr/bin/env python3 # coding=utf-8 import json import hmac from base64 import b64encode from datetime import datetime from urllib.parse import urlencode, quote import requests import datetime access_key_id = 'xxxxxx' secret_access_key = 'xxxxxx' URL = 'https://api.<your_domain>/iaas/' time_stamp = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ") def calc_signature(data): params_string = urlencode(sorted(data.items()), quote_via=quote) string_to_sign = '\n'.join(['POST', '/iaas/', params_string]) digestmod = 'SHA256' if data.get('signature_method', 'HmacSHA256') == 'HmacSHA256' else 'SHA1' h = hmac.new( key=secret_access_key.encode(), msg=string_to_sign.encode(), digestmod=digestmod, ) signature = b64encode(h.digest()).decode() print("signature:" + signature) return signature def req(action): data = { 'action': action, 'access_key_id': access_key_id, 'signature_method': 'HmacSHA256', 'signature_version':1, 'time_stamp': time_stamp, 'zone': 'sh1', 'server_certificate_name':'test1', 'certificate_content': 'xxxx', 'private_key': 'xxxx' } data['signature'] = calc_signature(data) resp = requests.post(URL, data=data) return resp.json() if __name__ == "__main__": from pprint import pprint action = 'CreateServerCertificate' result = req(action) pprint(result)
-
得到的签名如下。
EvCwxiGZyeri6TIkbMEhyy6YJorTccdd9fo8b5tQabY=
-
执行 CreateServerCertificate 的结果如下。
{ "action": "CreateServerCertificateResponse", "ret_code": 0, "server_certificate_id": "sc-j6f28axk" }