Bittrex Api上有一个名为 getbalance 的端点,它以货币作为字符串并返回该货币的当前余额。在函数中执行请求时,
balance = get_balance('BTC')
请求返回:
{'message':'INVALID_SIGNATURE',
'结果':没有,
'成功':错误}
功能:
def get_balance(currency):
endpoint = '/account/getbalance'
params = {
'currency' : currency
}
return call_endpoint(endpoint, False, params)
call_endpoint:
def call_endpoint(endpoint, isPublic, params = None):
base_url = 'https://bittrex.com/api/v1.1'
url = (base_url + endpoint +
'?apikey=' + API_KEY +
'&nonce=' + str(time.time())).encode('utf-8')
signature = hmac.new(SECRET_KEY, url, hashlib.sha512).hexdigest()
headers = {'apisign' : signature}
r = requests.get(url, headers = headers, params=params)
return r
但是,如果我要在函数之外请求它:
url = ('https://bittrex.com/api/v1.1/account/getbalance' +
'?apikey=' + API_KEY +
'&nonce=' + str(time.time()) +
'¤cy=BTC').encode('utf-8')
signature = hmac.new(SECRET_KEY, url, hashlib.sha512).hexdigest()
headers = {'apisign' : signature}
r = requests.get(url, headers = headers)
它有效。
{'message':'',
'结果':{'可用':
...,
'成功':真实}
这两种方法具有相同的代码,因此是否存在导致此错误的python函数或请求库?
答案 0 :(得分:1)
这两种做法不会做同样的事情。
您的call_endpoint
函数会在没有currency
参数的网址输入上计算标题的签名,然后在requests
参数中添加currency
。
您的其他代码段会计算包含currency
参数的网址上的签名。