Найти - Пользователи
Полная версия: Как сформировать запрос на создание Exmo кода?
Начало » Python для экспертов » Как сформировать запрос на создание Exmo кода?
1
AlexSn2020
Здравствуйте! Облазил всю сеть, не нашёл подсказки. Я пытаюсь переделать торгового бота, чтобы он отрезал 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)
Сам request:
 conn.request(http_method,"/"+API_VERSION + "/" + api_method, payload, headers)
Вот данные для 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’
ZerG
Ну и? Что не выхожит то? Что должно выйти?
Где ошибка? Примеры вывода?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB