Подписанный запрос с python на будущее - PullRequest
0 голосов
/ 08 января 2020

Я пытался отправить подписанный запрос в будущее связывания с использованием подписи.

Я нашел этот пример кода в StackOverflow («Вызов API Binance с запросами SHA56 и Python»), и был получен ответ учитывая упоминание об использовании hmac, как показано ниже: но, к сожалению, я до сих пор не вижу, как написать этот пример. Может ли кто-нибудь показать, как должен выглядеть код этого примера? Мне действительно неудобно с подписанным запросом. Большое спасибо за ваше понимание и за предоставленную помощь:

params = urlencode({
    "signature" : hashedsig,
    "timestamp" : servertimeint,
})
hashedsig = hmac.new(secret.encode('utf-8'), params.encode('utf-8'), hashlib.sha256).hexdigest()

Оригинальный пример:

import requests, json, time, hashlib

apikey = "myactualapikey"
secret = "myrealsecret"
test = requests.get("https://api.binance.com/api/v1/ping")
servertime = requests.get("https://api.binance.com/api/v1/time")

servertimeobject = json.loads(servertime.text)
servertimeint = servertimeobject['serverTime']

hashedsig = hashlib.sha256(secret)

userdata = requests.get("https://api.binance.com/api/v3/account",
    params = {
        "signature" : hashedsig,
        "timestamp" : servertimeint,
    },
    headers = {
        "X-MBX-APIKEY" : apikey,
    }
)

print(userdata)

1 Ответ

0 голосов
/ 25 марта 2020

Правильный путь будет следующим:

apikey = "myKey"
secret = "mySecret"

servertime = requests.get("https://api.binance.com/api/v1/time")

servertimeobject = json.loads(servertime.text)
servertimeint = servertimeobject['serverTime']

params = urlencode({
    "timestamp" : servertimeint,
})

hashedsig = hmac.new(secret.encode('utf-8'), params.encode('utf-8'), 
hashlib.sha256).hexdigest()

userdata = requests.get("https://api.binance.com/api/v3/account",
    params = {
        "timestamp" : servertimeint,
        "signature" : hashedsig,      
    },
    headers = {
        "X-MBX-APIKEY" : apikey,
    }
)
print(userdata)
print(userdata.text)

Убедитесь, что в качестве последнего параметра указан signature, или запрос будет return [400] ...

Неправильно:

params = {
    "signature" : hashedsig,
    "timestamp" : servertimeint,                  
}

Правильно:

params = {
    "timestamp" : servertimeint,
    "signature" : hashedsig,      
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...