请求Poloniex API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求Poloniex API相关的知识,希望对你有一定的参考价值。

我尝试使用Poloniex API。我尝试通过Trading API方法获得余额。我尝试使用这样的请求库:

import requests
import hmac
import hashlib
import time
import urllib

def setPrivateCommand(self):
    poloniex_data = {'command': 'returnBalances', 'nonce': int(time.time() * 1000)}
    post_data = urllib.parse.urlencode(poloniex_data).encode()
    sig = hmac.new(str.encode(app.config['HMAC_KEYS']['Poloniex_Secret']), post_data, hashlib.sha512).hexdigest()
    headers = {'Sign': sig, 'Key': app.config['HMAC_KEYS']['Poloniex_APIKey']}
    polo_request = requests.post('https://poloniex.com/tradingApi', data=post_data, headers=headers, timeout=20)
    polo_request = polo_request.json()
    print('Request: {0}'.format(polo_request))
    return polo_request

使用此代码,我总是会收到错误消息:“请求:{'错误':'无效命令。'}”。我做错了什么?

从下面的其他代码返回数据没有任何问题!看看这个,请:

import requests
import hmac
import hashlib
import json
import time
import urllib

def setPrivateCommand(self):
    poloniex_data = {'command': 'returnBalances', 'nonce': int(time.time() * 1000)}
    post_data = urllib.parse.urlencode(poloniex_data).encode()
    sig = hmac.new(str.encode(app.config['HMAC_KEYS']['Poloniex_Secret']), post_data, hashlib.sha512).hexdigest()
    headers = {'Sign': sig, 'Key': app.config['HMAC_KEYS']['Poloniex_APIKey']}
    req = urllib.request.Request('https://poloniex.com/tradingApi', data=post_data, headers=headers)
    res = urllib.request.urlopen(req, timeout=20)
    Ret_data = json.loads(res.read().decode('utf-8'))
    print('Request: {0}'.format(Ret_data))
    return Ret_data

我使用的是Python 3.6

答案

最好让requests处理帖子数据,因为它会创建合适的标题。除此之外,我没有看到您的代码有任何问题。

def setPrivateCommand(self):
    poloniex_data = {'command': 'returnBalances', 'nonce': int(time.time() * 1000)}
    post_data = urllib.parse.urlencode(poloniex_data).encode()
    sig = hmac.new(
        str.encode(app.config['HMAC_KEYS']['Poloniex_Secret']), post_data, hashlib.sha512
    ).hexdigest()
    headers = {'Sign': sig, 'Key': app.config['HMAC_KEYS']['Poloniex_APIKey']}
    polo_request = requests.post(
        'https://poloniex.com/tradingApi', data=poloniex_data, headers=headers, timeout=20
    )
    polo_request = polo_request.json()
    print('Request: {0}'.format(polo_request))
    return polo_request 

或者你可以在headers中指定'Content-Type',如果你想在data中有一个字符串,例如,

headers = {
    'Sign': sig, 'Key': app.config['HMAC_KEYS']['Poloniex_APIKey'], 
    'Content-Type': 'application/x-www-form-urlencoded'
}
polo_request = requests.post(
    'http://httpbin.org/anything', data=post_data, headers=headers, timeout=20
)

以上是关于请求Poloniex API的主要内容,如果未能解决你的问题,请参考以下文章

Poloniex C# Trading API webRequest 回来了 (403) Forbidden

使用Java访问Poloniex HTTP API

Poloniex API 文档

连接到 Poloniex Push-API

Poloniex 通过 Autobahn 推送 WAMP API,断开与对等 tcp 的连接

poloniex 403禁止使用python3.5