def getSignedUrl(base_url, params, timestamp = None):
global HMAC
hmac = HMAC.copy()
# Add a ISO 8601 compliant timestamp (in GMT)
if timestamp:
params['Timestamp'] = timestamp
else:
params['Timestamp'] = time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime())
#params['SignatureVersion']='1'
# Sort the URL parameters by key
keys = params.keys()
#keys.sort(cmp = lambda x, y: cmp(x.lower(), y.lower()))
keys.sort()
# Reconstruct the URL parameters and encode them
pairs = []
for key in keys:
#val = urllib.quote(params[key])
val = params[key]
pairs.append(key + '=' + val)
url_string = '&'.join(pairs)
url_string = url_string.replace('+', "%20")
url_string = url_string.replace(':', "%3A")
#Construct the string to sign
urlparts = base_url.split('/')
string_to_sign = """GET
%s
/%s/%s
%s""" % (urlparts[2], urlparts[3], urlparts[4], url_string)
url_string = url_string.replace(';', urllib.quote(';'))
# Sign the request
hmac.update(string_to_sign)
signature = hmac.digest()
# Base64 encode the signature
signature = base64.encodestring(signature).strip()
signature = signature.replace('+','%2B');
signature = signature.replace('=','%3D');
signature = signature.replace('/','%2F');
# Make the signature URL safe
url_string += "&Signature=%s" % signature
return "%s?%s" % (base_url, url_string)
## main functions
评论列表
文章目录