首页 > 解决方案 > 用 python 签署请求到币安未来

问题描述

我一直在努力使用签名向币安未来发送签名请求。

我在 StackOverflow 上找到了示例代码(“使用 SHA56 和 Python 请求的 Binance API 调用”),并给出了一个答案,提到使用 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)

标签: pythonrequestfuturesignedbinance

解决方案


正确的方法是:

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)

确保将 thesignature作为最后一个参数,否则请求将return [400]...

不正确:

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

正确的:

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

推荐阅读