我尝试使用我的Poloniex API密钥和密钥来检查我帐户的余额。但是,我一直在" invalid command
"作为回复返回。
以下是我在Python3中的代码:
command = 'returnBalances'
req['command'] = command
req['nonce'] = int(time.time()*1000)
post_data = urllib.parse.urlencode(req).encode()
sign = hmac.new(str.encode(self.Secret), post_data, hashlib.sha512).hexdigest()
headers = {
'Sign': sign,
'Key': self.APIKey
}
print(post_data)
req = urllib.request.Request(url='https://poloniex.com/tradingApi', headers=headers)
res = urllib.request.urlopen(req, timeout=20)
jsonRet = json.loads(res.read().decode('utf-8'))
return self.post_process(jsonRet)
print(post_data)
返回我期望看到的内容:
b'nonce=1491334646563&command=returnBalances'
答案 0 :(得分:5)
发送内容类型标题
这excellent article向我指出了正确的方向。看来python 3的请求库会跳过发送Content-Type标头,这会导致Polo拒绝请求。
'Content-Type': 'application/x-www-form-urlencoded'
标题
headers = {
'Sign': hmac.new(SECRET.encode(), post_data, hashlib.sha512).hexdigest(),
'Key': API_KEY,
'Content-Type': 'application/x-www-form-urlencoded'
}
答案 1 :(得分:0)
我猜你必须发送post_data
请求。我喜欢直接使用requests
库而不是urllib
,但是应该使用普通urllib
:
req = urllib.request.Request('https://poloniex.com/tradingApi', post_data, headers)