Windows下ThreadedWebsocketManager经HTTP代理无响应问题求助
Windows代理环境下ThreadedWebsocketManager无响应的解决方法
核心原因
Websocket(WSS协议)连接需要代理支持CONNECT隧道,而ThreadedWebsocketManager底层依赖的websocket-client库在Windows环境下不会自动读取系统的http_proxy/https_proxy环境变量来处理WSS连接——这就是为什么普通API请求(通过Client)能走代理,但Websocket数据流无响应的原因。
解决方案
1. 显式配置Websocket代理参数
修改代码,在初始化ThreadedWebsocketManager时通过websocket_options直接传递代理信息,替代仅依赖环境变量的方式:
from binance import ThreadedWebsocketManager # 替换为你的实际信息 API_KEY = '<my api key>' API_SECRET = '<my secrect key>' PROXY_HOST = "<proxyurl>" PROXY_PORT = <port> PROXY_USER = "<username>" PROXY_PASS = "<password>" def main(): symbol = 'BTCUSDT' # 构造websocket代理配置 ws_proxy = { "http_proxy_host": PROXY_HOST, "http_proxy_port": PROXY_PORT, "http_proxy_auth": (PROXY_USER, PROXY_PASS) } # 初始化时传入代理设置 twm = ThreadedWebsocketManager( api_key=API_KEY, api_secret=API_SECRET, websocket_options=ws_proxy ) twm.start() def handle_socket_message(msg): print(f"message type: {msg['e']}") print(msg) twm.start_kline_socket(callback=handle_socket_message, symbol=symbol) twm.join() if __name__ == "__main__": main()
2. 验证代理兼容性
- 确认代理服务器允许CONNECT请求访问币安的WSS域名(
stream.binance.com)及443端口 - 若代理有白名单限制,联系IT添加该域名到允许列表(无管理员权限无需自行修改系统设置)
3. 特殊字符处理
如果代理账号或密码包含@、:等特殊字符,需要进行URL编码:
@→%40:→%3A- 示例:
user@name→user%40name
内容的提问来源于stack exchange,提问作者excelsior9000
相关产品推荐
相关产品推荐

