Python调用示例 此示例仅适用于 Python 3.6 以上版本 python encoding: utf8 import urllib import requests import json import hashlib import base64 import hmac import datetime import uuid import os import sys if sys.versioninfo.major 2: from urllib import quote sys.setdefaultencoding('utf8') else: from urllib.parse import quote from importlib import reload import xml.etree.ElementTree as ET reload(sys) METHODGET 'GET' METHODPOST 'POST' METHODHEAD 'HEAD' METHODPATCH 'PATCH' METHODPUT 'PUT' METHODDELETE 'DELETE' file:参数中是否包含文件类型 file False def hmacsha256(secret, data): if type(secret) bytes: secret bytearray(secret) else: secret bytearray(secret, 'utf8') data bytearray(data, 'utf8') return hmac.new(secret, data, digestmodhashlib.sha256).digest() def base64ofhmac(data): return base64.b64encode(data) def getrequestuuid(): return str(uuid.uuid1()) def getsortedstr(data, method): """ 鉴权用的参数整理 :param data: dict 需要整理的参数 :return: str """ if isinstance(data, str): data eval(data) data json.loads(data) sorteddata sorted(data.items(), keylambda item: item[0]) strlist map(lambda xy: '%s%s' % (xy[0], xy[1]), sorteddata) return '&'.join(strlist) def buildsign(ak, sk, queryparams, bodyparams, eopdate, requestuuid, method, file, contenttype): """ 计算鉴权字段 :param queryparams: dict get请求中的参数 :param bodyparams: dict post请求中的参数 :param eopdate: str 请求时间,格式为:'%Y%m%dT%H%M%SZ' :return: str """ bodystr "" if not file: bodystr json.dumps(bodyparams) if bodyparams else '' if method "POST" or method "PUT": if file: bodydigest hashlib.sha256(bodyparams).hexdigest() else: if isinstance(bodyparams, dict): bodydigest hashlib.sha256(json.dumps(bodyparams).encode('utf8')).hexdigest() else: bodydigest hashlib.sha256(bodyparams.encode('utf8')).hexdigest() else: bodydigest hashlib.sha256(bodystr.encode('utf8')).hexdigest()