[Fix] 修正了huobiGateway与GET方法相关的签名问题

This commit is contained in:
nanoric 2018-12-27 01:15:00 -04:00
commit 6542f1ebfa
2 changed files with 16 additions and 11 deletions

View File

@ -48,6 +48,7 @@ class Request(object):
statusCode = 'terminated' statusCode = 'terminated'
else: else:
statusCode = self.response.status_code statusCode = self.response.status_code
# todo: encoding error
return ("reuqest : {} {} {} because {}: \n" return ("reuqest : {} {} {} because {}: \n"
"headers: {}\n" "headers: {}\n"
"params: {}\n" "params: {}\n"

View File

@ -38,14 +38,21 @@ def _split_url(url):
#---------------------------------------------------------------------- #----------------------------------------------------------------------
def createSignature(apiKey, method, host, path, secretKey): def createSignature(apiKey, method, host, path, secretKey, getParams=None):
"""创建签名""" """
sortedParams = ( 创建签名
:param getParams: dict 使用GET方法时附带的额外参数(urlparams)
:return:
"""
sortedParams = [
("AccessKeyId", apiKey), ("AccessKeyId", apiKey),
("SignatureMethod", 'HmacSHA256'), ("SignatureMethod", 'HmacSHA256'),
("SignatureVersion", "2"), ("SignatureVersion", "2"),
("Timestamp", datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')) ("Timestamp", datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S'))
) ]
if getParams:
sortedParams.extend(getParams.items())
sortedParams = list(sorted(sortedParams))
encodeParams = urllib.urlencode(sortedParams) encodeParams = urllib.urlencode(sortedParams)
payload = [method, host, path, encodeParams] payload = [method, host, path, encodeParams]
@ -225,16 +232,13 @@ class HuobiRestApi(RestClient):
request.headers = { request.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
} }
paramsWithSignature = createSignature(self.apiKey,
additionalParams = createSignature(self.apiKey,
request.method, request.method,
self.signHost, self.signHost,
request.path, request.path,
self.apiSecret) self.apiSecret,
if not request.params: request.params)
request.params = additionalParams request.params = paramsWithSignature
else:
request.params.update(additionalParams)
if request.method == "POST": if request.method == "POST":
request.headers['Content-Type'] = 'application/json' request.headers['Content-Type'] = 'application/json'