Python获取Mozzartbet实时WebSocket数据仅输出True的问题排查
问题分析:Socket.IO连接仅返回"true"无法获取实时数据流
我尝试从该站点通过WebSocket获取实时更新,编写了如下Python代码:
import websocket def on_message(ws, message): print(message) def on_close(ws, close_status_code,close_msg): print("closed connection") socket = "wss://www.mozzartbet.co.ke/socket.io/?EIO=3&transport=websocket" ws = websocket.WebSocketApp(socket,on_message= on_message, on_close=on_close) ws.run_forever()
但未获取到实时数据流,仅输出“true”,请问问题出在哪里?
问题根源
你用原生websocket库直接连接Socket.IO服务是行不通的——Socket.IO是基于WebSocket的上层协议,有自己的握手流程、消息编码规则和心跳机制,不是裸WebSocket连接就能直接通信的。输出的"true"只是Socket.IO连接建立后的初始响应,但你没按协议要求发送后续的订阅指令和心跳包,服务器自然不会推送实时数据。
解决办法
- 改用专门的Socket.IO客户端库
python-socketio,它会自动处理协议细节。 - 先安装依赖:
pip install python-socketio[client]
- 重写代码(需结合抓包信息调整事件名称):
import socketio sio = socketio.Client() @sio.event def connect(): print("连接成功") # 这里要替换成站点实际的订阅指令,比如通过浏览器抓包查看前端发送的事件和参数 # 示例:sio.emit('subscribe_live_sports', {'sport_id': 1}) @sio.event def disconnect(): print("连接断开") # 监听服务器推送的实时数据,事件名称要和服务器实际使用的一致(需抓包获取) @sio.on('live_event_update') # 替换为真实事件名 def on_receive_data(data): print("实时更新数据:", data) # 连接服务,指定使用websocket传输 sio.connect('wss://www.mozzartbet.co.ke/socket.io/?EIO=3', transports=['websocket']) # 保持连接运行 sio.wait()
- 关键补充:打开浏览器开发者工具(Network标签→WebSocket),查看前端和服务器的通信细节:
- 前端发送的订阅事件名称、参数
- 服务器推送数据时使用的事件名称
- 是否需要指定Socket.IO命名空间
内容的提问来源于stack exchange,提问作者Star Lizard
相关产品推荐
相关产品推荐

