说明

本文为 Python3 语言的 Post 类型请求示例。以下示例中,需要根据实际情况修改的参数有。

  • 根据实际的 API 秘钥修改 access_key_idsecret_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"
    }