Binance API错误(-2015)求助:已尝试多种方案仍无法解决
以下是容易被忽略的排查方向,你可以逐一验证:
检查IP白名单的准确性:
别想当然认为IP正确,去Binance API管理后台,把当前运行代码机器的公网出口IP添加到白名单里。如果用了VPN、代理或者公司内网,实际请求的IP可能不是你本地机器的IP,用curl https://api.ipify.org查下真实出口IP再核对。确认API权限的细节:
client.get_account()需要的是「Read Spot & Margin Data」权限,哪怕你开了交易权限,没开这个读取权限也会触发报错。去API页面仔细核对权限列表,确保这个读取权限已勾选。排查密钥的复制问题:
很多人复制secret key时会不小心带了换行符或者首尾空格,建议把代码里的api_key和secret_key临时打印出来(测试完立刻删除!),和Binance后台显示的密钥逐字符对比,确保完全一致。检查API的状态:
去Binance后台确认你用的这个API是「Active」状态,有没有被禁用或者冻结。如果创建过多个API,别搞混了用了旧的失效密钥。调整网络和TLD设置:
用tld="com"时如果网络访问不稳定,会导致请求无法正确传递密钥,触发权限报错。可以试试改成tld="cn"(针对国内用户),先测试能否正常访问https://api.binance.com/api/v3/time,看返回是否是正常的时间戳。修复时间同步问题:
Binance API对请求时间戳的偏差要求严格,超过500ms就会报错。你可以在代码里先对比本地时间和服务器时间:
import time from binance.client import Client from binance.exceptions import BinanceAPIException client = Client(api_key=api_key, api_secret=secret_key, tld="com", recvWindow=60000) # 对比服务器时间和本地时间 server_time = client.get_server_time()['serverTime'] local_time = int(time.time() * 1000) time_diff = abs(server_time - local_time) print(f"时间差: {time_diff}ms") if time_diff > 500: print("本地时间与服务器时间偏差过大,请同步系统时间") else: try: account = client.get_account() print("账户信息获取成功") except BinanceAPIException as e: print(f"报错: {e}")
如果时间偏差太大,手动同步系统时间,或者调大recvWindow参数(最大不超过60000)。
内容的提问来源于stack exchange,提问作者sanemdogan

