0

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

2 回答 2

8

发送 Content-Type 标头

这篇出色的文章为我指明了正确的方向。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'
}
于 2017-06-25T10:13:46.067 回答
0

我想你必须发送post_data请求。我喜欢使用该requests库而不是urllib直接使用该库,但它应该是这样的urllib

req = urllib.request.Request('https://poloniex.com/tradingApi', post_data, headers)
于 2017-04-04T19:59:38.153 回答