Python中调用FTX API如何完成FTX_Client身份认证?
问题原因
你代码的核心错误是请求头绑定对象错误:调用request.prepare()生成编译后的请求实例后,你将FTX认证相关的请求头添加到了原始的Request对象上,而实际发送请求用的prepared实例没有携带这些认证头,导致服务端无法识别身份,返回Not logged in错误。
修复方案
调整头字段的绑定对象,同时补充常规校验项:
- 将
FTX-KEY、FTX-SIGN、FTX-TS头字段绑定到prepared实例,而不是原始request对象 - 确认API密钥对的
key和secret没有前后多余空格、换行符 - 运行代码的设备本地时间和UTC时间偏差不能超过5秒,否则会被服务端判定签名过期
- 如果你使用子账户,需要额外添加
FTX-SUBACCOUNT头,值为URL编码后的子账户名称
修复后可运行的代码片段
import time import urllib.parse from typing import Optional, Dict, Any, List from requests import Request, Session, Response import hmac # 请替换为你自己的API密钥 key = "你的API_KEY" secret = "你的API_SECRET" ep = 'https://ftx.us/api/wallet/balances' ts = int(time.time() * 1000) s = Session() request = Request('GET', ep) prepared = request.prepare() signature_payload = f'{ts}{prepared.method}{prepared.path_url}'.encode() if prepared.body: signature_payload += prepared.body signature = hmac.new(secret.encode(), signature_payload, 'sha256').hexdigest() # 关键修改:给prepared实例加头,而不是原始request对象 prepared.headers['FTX-KEY'] = key prepared.headers['FTX-SIGN'] = signature prepared.headers['FTX-TS'] = str(ts) # 若使用子账户,取消注释下行,替换为你的子账户名 # prepared.headers['FTX-SUBACCOUNT'] = urllib.parse.quote('你的子账户名') response = s.send(prepared) data = response.json() print(data)
内容的提问来源于stack exchange,提问作者Derek Holtz
相关产品推荐
相关产品推荐

