Python开发Bitmex交易机器人调用指定API接口出现连接错误
Bitmex API连接报错根因定位与修复方案
根本原因
报错属于典型的字符串拼接失误,并非网络不通、API密钥错误或接口权限类问题。
从日志提取的关键信息可直接定位问题:程序实际尝试连接的主机是testnet.bitmex.comapi——原本独立的BitMEX测试网域名testnet.bitmex.com,被和接口路径开头的api无分隔粘连成了不存在的伪域名,自然触发DNS解析失败(对应错误码errno 11001 getaddrinfo failed)。
这类失误的来源是_make_request方法手动拼接URL时,没有在base_url和接口路径之间加入路径分隔符/。
可落地修复步骤
- 修正
_make_request方法的URL拼接逻辑,放弃手动直接拼接字符串的写法,使用Python内置的urljoin方法做安全拼接,示例代码:
该写法会自动校验路径分隔规则:无论base_url尾部是否带斜杠、接口路径开头是否带斜杠,都不会出现域名和路径粘连的问题,最终生成的请求地址为正确的from urllib.parse import urljoin def _make_request(self, method: str, endpoint: str, params: dict): # 拼接时自动补全路径分隔符,避免域名和路径粘连 full_url = urljoin(self._base_url + "/", endpoint) # 后续原有请求逻辑、签名逻辑保持不变https://testnet.bitmex.com/api/v1/instrument/active。 - 连通性验证
修正拼接逻辑后,不要直接运行全量初始化代码做排查:- 在拼接URL的代码段加一行打印语句,确认输出的完整URL中,域名部分为
testnet.bitmex.com,没有后缀粘连的api字符串 - 直接用浏览器访问拼接完成的公开接口地址
https://testnet.bitmex.com/api/v1/instrument/active,能正常返回合约列表的JSON数据,即说明接口连通性正常
- 在拼接URL的代码段加一行打印语句,确认输出的完整URL中,域名部分为
- 鉴权接口校验
公开接口连通正常后,再调用需要签名鉴权的user/margin接口,重点检查签名生成时的时间戳、请求方法、路径、参数的拼接规则是否符合BitMEX官方要求,避免拼接修正后又出现鉴权类报错。
注意:修复拼接逻辑前,无需优先排查本地网络、代理或防火墙设置——当前报错的核心是请求目标为不存在的伪域名,和网络连通性没有直接关系。
内容的提问来源于stack exchange,提问作者Ahmad Alsaadi
相关产品推荐
相关产品推荐

