Python-socketio客户端配置HTTP代理的方法咨询
Python-socketio客户端配置HTTP代理的方法咨询
嘿,我之前也踩过python-socketio配置HTTP代理的坑,这个库本身确实没直接提供你示例里那样的proxy参数,得从它依赖的底层库入手解决,我给你整理两种常用传输方式的配置方案:
1. 针对Long-Polling传输方式(默认 fallback 方案)
如果你的连接用的是polling传输(基于HTTP长轮询,依赖requests库),可以通过自定义requests.Session注入代理配置,再传给socketio客户端:
import requests import socketio # 创建带代理的requests会话 proxy_session = requests.Session() # 配置HTTP和HTTPS代理,根据你的代理类型调整 proxy_session.proxies = { "http": "http://your-proxy-host:port", "https": "http://your-proxy-host:port" } # 初始化socketio客户端时传入这个会话 sio = socketio.Client(http_session=proxy_session) sio.connect(url='your-target-url', transports=["polling"])
2. 针对WebSocket传输方式
如果指定用websocket传输,就得从websocket-client库的配置入手,有两种可行方法:
方法一:通过环境变量全局设置
运行Python脚本前,先设置代理相关的环境变量,websocket-client会自动读取:
# Linux/macOS终端 export HTTP_PROXY=http://your-proxy-host:port export HTTPS_PROXY=http://your-proxy-host:port # Windows命令行 set HTTP_PROXY=http://your-proxy-host:port set HTTPS_PROXY=http://your-proxy-host:port
之后正常初始化socketio客户端即可:
import socketio sio = socketio.Client() sio.connect(url='your-target-url', transports=["websocket"])
方法二:自定义WebSocket传输类注入代理
不想用全局环境变量的话,可以自定义传输类修改底层WebSocket配置:
import socketio from socketio.transports import WebSocketTransport class ProxyEnabledWebSocket(WebSocketTransport): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 配置代理地址和端口 self.ws_opts["http_proxy_host"] = "your-proxy-host" self.ws_opts["http_proxy_port"] = 8080 # 替换成你的代理端口 # 如果代理需要用户名密码认证,添加下面一行 # self.ws_opts["http_proxy_auth"] = ("proxy-username", "proxy-password") # 注册自定义的传输类 socketio.Client.register_transport(ProxyEnabledWebSocket, "websocket") # 初始化客户端并连接 sio = socketio.Client() sio.connect(url='your-target-url', transports=["websocket"])
额外提醒:如果没指定固定传输方式,socketio可能在WebSocket失败时 fallback 到Long-Polling,这时候两种传输的代理都得配置好才能确保正常连接。另外要确认你的代理服务器支持对应传输的协议(比如WebSocket需要代理支持CONNECT方法)。
备注:内容来源于stack exchange,提问作者SirAmir
相关产品推荐
相关产品推荐

