为什么我得到了无效的命令'来自Poloniex API与Python 3?

时间:2017-04-04 19:42:43

标签: python python-3.x poloniex

我尝试使用我的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'

2 个答案:

答案 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)