in apis/open_api_sign.py [0:0]
def sign(public_params, http_method, accesskey_secret):
public_param = public_params
format_time = '%Y-%m-%dT%H:%M:%SZ'
utctime = datetime.datetime.utcnow().strftime(format_time)
signature_nonce = str(uuid.uuid1())
public_param['SignatureNonce'] = signature_nonce
public_param['Timestamp'] = utctime
sort_all_params = list()
for key, value in public_param.items():
all_params = key + '=' + str(value)
sort_all_params.append(all_params)
sort_all_params.sort()
for i in range(len(sort_all_params)):
if 'NextToken' in sort_all_params[i]:
continue
sort_all_params[i] = quote(sort_all_params[i], '=')
# tmp = sort_all_params[i]
if sort_all_params[i].find('+'):
sort_all_params[i].replace('+', '%20')
elif sort_all_params[i].find('*'):
sort_all_params[i].replace('*', '%2A')
elif sort_all_params[i].find('%7E'):
sort_all_params[i].replace('%7E', '~')
# print(sort_all_params)
str_to_sign = ''
for i in range(len(sort_all_params)):
str_to_sign = str_to_sign + sort_all_params[i] + '&'
str_to_sign = http_method + '&%2F&' + quote(str_to_sign[:-1])
# print(str_to_sign)
key = accesskey_secret + '&'
signature = hmac.new(key.encode('utf-8'), str_to_sign.encode('utf-8'), digestmod=hashlib.sha1)
signature = base64.b64encode(signature.digest()).decode()
# print(signature)
# 解决签名中包含有'+'的特殊情况
signature = list(signature)
for i in range(len(signature)):
if signature[i] == '+':
signature[i] = '%2B'
new_signature = ''.join(signature)
public_param['Signature'] = new_signature
return public_param