Запросы для Poloniex API

Я пытаюсь работать с Poloniex API. И я пытаюсь получить баланс с помощью методов 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

1 ответ

Решение

Лучше всего позволить 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 

Или вы можете указать "Content-Type" в headers если вы хотите иметь строку в 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
)
Другие вопросы по тегам