Здравствуйте! Облазил всю сеть, не нашёл подсказки. Я пытаюсь переделать торгового бота, чтобы он отрезал exmo код. Чуть изменил программу, но никак не могу сформировать правильный request.
Подскажите, что мне переделать?
import urllib, http.client
import time
import json
# эти модули нужны для генерации подписи API
import hmac, hashlib
from exmo_key import *
# ключи API, которые предоставила exmo
API_KEY = a
# обратите внимание, что добавлена 'b' перед строкой
API_SECRET = b
CURRENCY='RUB'
# базовые настройки
API_URL = 'api.exmo.com'
API_VERSION = 'v1'
# Свой класс исключений
class ScriptError(Exception):
pass
class ScriptQuitCondition(Exception):
pass
# все обращения к API проходят через эту функцию
def call_api(api_method, http_method="POST", **kwargs):
# Составляем словарь {ключ:значение} для отправки на биржу
# пока что в нём {'nonce':123172368123}
payload = {'nonce': int(round(time.time()*1000))}
# Если в ф-цию переданы параметры в формате ключ:значение
if kwargs:
# добавляем каждый параметр в словарь payload
# Получится {'nonce':123172368123, 'param1':'val1', 'param2':'val2'}
payload.update(kwargs)
# Переводим словарь payload в строку, в формат для отправки через GET/POST и т.п.
payload = urllib.parse.urlencode(payload)
# Из строки payload получаем "подпись", хешируем с помощью секретного ключа API
# sing - получаемый ключ, который будет отправлен на биржу для проверки
H = hmac.new(key=API_SECRET, digestmod=hashlib.sha512)
H.update(payload.encode('utf-8'))
sign = H.hexdigest()
# Формируем заголовки request для отправки запроса на биржу.
# Передается публичный ключ API и подпись, полученная с помощью hmac
headers = {"Content-type": "application/x-www-form-urlencoded",
"Key":API_KEY,
"Sign":sign,
"currency":CURRENCY,
"amount":10
}
# Создаем подключение к бирже, если в течении 60 сек не удалось подключиться, обрыв соединения
conn = http.client.HTTPSConnection(API_URL, timeout=60)
# После установления связи, запрашиваем переданный адрес
# В заголовке запроса уходят headers, в теле - payload
conn.request(http_method,"/"+API_VERSION + "/" + api_method, payload, headers)
# Получаем ответ с биржи и читаем его в переменную response
response = conn.getresponse().read()
# Закрываем подключение
conn.close()
return response
ex_code=call_api('excode_create')
print(ex_code)
Вот данные для POST запроса:
curl --location --request POST '
https://api.exmo.com/v1/excode_create' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Key: ' \
--header 'Sign: ' \
--data-urlencode 'currency=BTC' \
--data-urlencode 'amount=10' \
--data-urlencode 'login=test_user' \
--data-urlencode 'nonce=1592989431'