Binance <Api-key format invalid.> 使用 Python 请求但适用于 curl

问题描述

我正在尝试使用 python 请求在 Binance 测试网上下订单。它总是抛出 {"code":-2014,"msg":"API-key format invalid."}。但是当与 curl 一起使用时,相同的 url 会成功返回数据。有人可以指出我的python请求代码有什么问题吗?

API_KEY= <api_key>
SECRET= <password>

import time
import requests
import hashlib
import hmac

def hashing(query_string):
    return hmac.new(SECRET.encode('utf-8'),query_string.encode('utf-8'),hashlib.sha256).hexdigest()

base_url = "https://testnet.binance.vision"
api_path = "/api/v3/order"
timestamp = int(time.time()*1000)
msg = "symbol=BNBUSDT&side=BUY&type=LIMIT&quantity=1&timeInForce=GTC&price=200&timestamp={}".format(timestamp)
msg_hash = hashing(msg)

url = f"{base_url}{api_path}?{msg}&signature={msg_hash}"

print(url)

headers = {'Content-Type': 'application/json;charset=utf-8','X-MBX-APIKEY': API_KEY}

print("\nusing python-requests")
with requests.Session() as session:
    session.headers.update(headers)
    resp = session.put(url)
    print(resp)


print("\nusing curl")
!curl -H "X-MBX-APIKEY: {API_KEY}" -X POST "{url}"

colab 链接https://colab.research.google.com/drive/1qPuDK_mGBchpoD4cVbq6oKvt_WY4nX71?usp=sharing

解决方法

所以一些事情。

  1. 在您的 curl 中,您拥有的唯一标头是 X-MBX-APIKEY 而不是内容类型。所以我会尝试相应地改变它。

  2. 同样在 curl 中,您正在执行 POST 请求而不是 PUT。我也会改变它。

  3. 我不确定 curl 是否在编码任何不同的东西。我会以不同的方式传递 url 参数并让请求处理它。

因此,

params = {
    'symbol': 'BNBUSDT','side': 'BUY','type': 'LIMIT','quantity': '1','timeInForce': 'GTC','price': '200','timestamp': timestamp,'signature': msg_hash
}

headers = {
    'X-MBX-APIKEY': API_KEY
}

r = requests.post(base_url+api_path,params=params,headers=headers)

这是假设你的 curl 工作正常。我在您的 colab 中看到 curl 返回错误。通常还需要在 POST 中传入 data 关键字参数,我会参考 binance api 文档。

注意,要恢复请求的url,可以print(r.url),即https://testnet.binance.vision/api/v3/order?symbol=BNBUSDT&side=BUY&type=LIMIT&quantity=1&timeInForce=GTC&price=200&timestamp=X&signature=XX

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...