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

Python使用python-binance访问币安API被运营商屏蔽报错如何解决?

问题根因

你遇到的SSL证书验证失败本质是:Python请求库默认没有复用浏览器的DNS解析结果和证书信任链,你修改的DNS配置仅对系统级、浏览器生效,Python的urllib3/requests层仍然拿到被污染的解析结果,请求被劫持到政府拦截页面,该页面使用的自签名证书不在Python默认信任的CA列表中,因此抛出验证错误。

可行解决方案

方案1:指定python-binance使用币安备用API域名

币安官方提供了多个规避DNS污染的备用访问域名,无需修改环境配置,直接在初始化客户端时传入即可,是成本最低的方案:

  • 初始化客户端代码示例:
from binance.client import Client

client = Client(
    api_key='你的API_KEY',
    api_secret='你的API_SECRET',
    testnet=False,
    # 可替换为其他官方可用的备用域名测试
    base_url='https://api.binancezh.cc'
)

方案2:强制Python请求使用自定义DNS服务器

如果要坚持使用原api.binance.com域名,可修改Python请求的DNS解析逻辑,强制走Google/Cloudflare公共DNS:

  • 先安装依赖库:pip install dnspython
  • 自定义DNS解析适配器绑定到客户端,示例代码如下:
import dns.resolver
import requests
from binance.client import Client
from requests.adapters import HTTPAdapter

# 配置自定义DNS解析器
resolver = dns.resolver.Resolver()
resolver.nameservers = ['8.8.8.8', '1.1.1.1'] # Google、Cloudflare公共DNS

class CustomDNSAdapter(HTTPAdapter):
    def resolve_host(self, host):
        return resolver.resolve(host, 'A')[0].address

    def send(self, request, **kwargs):
        original_host = request.url.split('/')[2]
        resolved_ip = self.resolve_host(original_host)
        request.url = request.url.replace(original_host, resolved_ip)
        request.headers['Host'] = original_host
        return super().send(request, **kwargs)

# 自定义session绑定到python-binance客户端
session = requests.Session()
session.mount('https://', CustomDNSAdapter())
client = Client(api_key='你的API_KEY', api_secret='你的API_SECRET', requests_params={'session': session})

方案3:配置Python请求走代理(可选)

如果你本地有可用的代理服务,可直接传入代理配置快速解决:

proxies = {
    'http': 'http://127.0.0.1:你的代理端口',
    'https': 'http://127.0.0.1:你的代理端口'
}
client = Client(api_key='你的API_KEY', api_secret='你的API_SECRET', requests_params={'proxies': proxies})

方案4:仅临时测试用,关闭SSL证书验证

该方案存在中间人攻击风险,生产环境禁止使用:

import urllib3
# 忽略关闭验证后的不安全警告
urllib3.disable_warnings()

client = Client(
    api_key='你的API_KEY',
    api_secret='你的API_SECRET',
    requests_params={'verify': False}
)
生效验证

调用ping接口测试配置是否正常:

print(client.ping())

如果返回空字典{}则说明配置生效,可正常调用get_all_orders等其他业务接口。

内容的提问来源于stack exchange,提问作者CH Andre Mailoa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:00