Аутентификация API через Python

У меня возникли проблемы с выполнением инструкций API LakeBTC для подключения к их API через Python.

Документация по API: https://www.lakebtc.com/s/api

У меня есть ключ (адрес электронной почты) и секрет. Я использую URL-адрес API: https://www.LakeBTC.com/api_v1 .

Что бы я ни пытался, я получаю ошибку 401. Ниже мой код, есть идеи?

tonce = str(int(time.time() * 1e6))

p = 'tonce=' + tonce \
    + '&accesskey=' + self.key \
    + '&requestmethod=post' \
    + '&id=1' \
    + '&method=' + 'getAccountInfo' \
    + '&params='

# Create signature
hmac_obj = hmac.new(self.secret, p, hashlib.sha1)

b64 = 'Basic ' + base64.b64encode(self.key + ':' + hmac_obj.digest())

header = {
    'Json-Rpc-Tonce': tonce,
    'Authorization': b64,
    'content-type': 'application/json-rpc',
}

response = requests.post(self.apiUrl, data=p, headers=header)

Правильно ли я шифрую и хэширую?

Что говорит возвращенный заголовок WWW-Authenticate? Есть ли тело ответа? Если да, показывает ли ошибку?
Тело не возвращается, вот возвращенный заголовок: {'status': '401 Unauthorized', 'x-request-id': '94f303be4a3e97e8dc289fbe1881555b', 'x-powered-by': 'Phusion Passenger 4.0.14', ' transfer-encoding': 'фрагментировано', 'x-runtime': '0.002153', 'сервер': 'nginx/1.6.0', 'соединение': 'keep-alive', 'x-ua-совместимость': ' IE=Edge,chrome=1', 'управление кешем': 'без кеша', 'дата': 'Чт, 23 октября 2014 г., 17:18:16 по Гринвичу', 'тип контента': 'application/json; charset=utf-8', 'x-rack-cache': 'аннулировать, пройти'}

Ответы (2)

Присмотревшись к их странице API, вы обнаружите, что LakeBTC предоставил простой код для Python: https://github.com/LakeBTC/lakebtc_python .

И другие образцы кода, которые вы можете найти здесь: https://www.lakebtc.com/s/api , включая PHP, Node.JS, Ruby и Python, возможно, в будущем будет больше кода :)

Хорошая работа! Я не видел этого на их странице API. +1
Действительно! Я на самом деле только что получил электронное письмо от них после того, как они добавили его!

Кажется, я понял твою проблему. (Или, по крайней мере, один из них.)

Шаг 6: POST отправляет данные параметров в формате JSON по этому URL-адресу:
https://www.LakeBTC.com/api_v1 .

Вы не публикуете правильную информацию; вы публикуете всю подпись.

response = requests.post(self.apiUrl, data=p, headers=header)

Должно быть что-то вроде:

response = requests.post(self.apiUrl, data=json.dumps(
    {
        "method": method,
        "params":",".join(params),
        "id": 1,
    }, headers=header)