You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Binance API连接超时等三类错误求助(附代码及尝试方案)

解决Binance API连接与超时问题

优化后的完整代码

from binance.client import Client
from time import sleep
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

API_KEY = "---"
API_SECRET = "---"

def create_binance_client():
    # 配置自动重试策略
    session = requests.Session()
    retry = Retry(
        total=5,
        backoff_factor=1,
        status_forcelist=[429, 500, 502, 503, 504],
        allowed_methods=["GET"]
    )
    adapter = HTTPAdapter(max_retries=retry)
    session.mount("https://", adapter)
    
    # 创建带自定义会话的Client,延长读取超时
    client = Client(API_KEY, API_SECRET, requests_session=session)
    client.API_TIMEOUT = 30  # 将默认10秒超时改为30秒
    return client

def hist_data():
    client = create_binance_client()
    while True:
        try:
            candle = client.get_historical_klines('BTCUSDT', '5m', '15m ago UTC')
            print(candle)
            sleep(30)  # 添加请求间隔,避免触发API限流
        except requests.exceptions.ConnectionError as e:
            print(f"连接错误: {e}")
            sleep(15)
            client = create_binance_client()  # 重建客户端连接
        except requests.exceptions.ReadTimeout as e:
            print(f"读取超时: {e}")
            sleep(15)
            client = create_binance_client()
        except Exception as e:
            print(f"其他错误: {e}")
            sleep(10)

hist_data()

三类错误的针对性解决说明

1. 连接中止错误 (ConnectionAbortedError)

你原有的pass处理能让程序继续运行,但更严谨的方式是捕获特定连接异常,而非泛用Exception,同时在错误后重建客户端连接——避免复用已失效的连接实例。优化代码中专门捕获requests.exceptions.ConnectionError,并调用create_binance_client()生成新的连接。

2. ReadTimeout 读取超时错误

这类错误源于默认10秒的读取超时过短,且缺乏自动重试机制。解决核心:

  • 延长API读取超时至30秒,给服务器足够响应时间
  • 添加自动重试策略,针对5xx服务器错误、429限流错误自动重试,且重试间隔随次数递增(通过backoff_factor实现)
  • 超时后重建Client,确保使用全新的会话连接

3. 最大重试超限/无法解析主机名错误

当网络持续不可用时,频繁重试只会耗尽重试次数。优化方案:

  • 通过backoff_factor实现退避式重试,每次重试间隔递增(1s→2s→4s…),给网络恢复留出时间
  • 捕获错误后等待15秒再重建连接,避免立刻重试
  • 每次错误后创建全新的Client实例,抛弃之前的无效会话

额外优化点

  • 移除global变量管理Client,改用函数创建实例,避免全局状态污染
  • 添加请求间隔(sleep(30)),遵守Binance API限流规则,降低被封禁风险
  • 优先捕获特定异常类型,精准处理不同错误场景,避免掩盖未知问题

内容的提问来源于stack exchange,提问作者Shankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:00:19