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

Python连接Socket.IO获取x13.bet数据失败,请求技术帮助

解决Socket.io连接成功但无法获取数据的问题

针对你遇到的情况,以下是几个关键的排查和修复方向:

1. 确保客户端与服务端Socket.io版本兼容

你的接口使用EIO=4,对应Socket.io v4.x版本。需要确保python-socketio客户端版本匹配,建议安装指定版本:

pip install "python-socketio[client]==4.6.1"

2. 添加必要的请求头(Referer、User-Agent)

多数网站会校验请求来源和客户端标识,缺失这些头会导致服务端拒绝推送数据。修改连接代码,添加自定义头:

import socketio

url = "https://s.x13.bet:2053"

sio = socketio.Client()

@sio.event
def connect():
    print("Connected.")

# 替换为抓包得到的实际事件名(比如'game_update')
@sio.event
def game_update(data):
    print("Received game data:", data)

@sio.event
def disconnect():
    print("Disconnected.")

# 添加请求头,模拟浏览器环境
headers = {
    'Referer': 'https://x13.bet/double',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

sio.connect(url, transports=['polling'], headers=headers)

sio.wait()

3. 确认正确的事件监听名

浏览器预览中的真实数据,是通过服务端发送的自定义事件推送的,不是默认的message事件。你需要:

  • 打开浏览器开发者工具(F12)→ 网络标签
  • 过滤socket.io请求,查看服务端发送的消息格式(比如42["game_update", {...}],其中game_update就是事件名)
  • 将代码中的game_update替换为实际捕获的事件名

4. 检查是否需要指定命名空间

如果目标接口属于特定的Socket.io命名空间(比如/double),连接时需要明确指定:

sio.connect(url, transports=['polling'], headers=headers, namespaces='/double')

5. 模拟完整的握手流程

有些服务端会在连接后要求发送认证信息(比如携带页面的session token),你需要抓包浏览器的完整Socket.io交互流程,包括:

  • 初始握手请求的响应参数
  • 连接后发送的认证消息(比如40["auth", {"token": "..."}])
  • 在代码中模拟发送这些消息:
@sio.event
def connect():
    print("Connected.")
    # 发送认证消息(替换为抓包得到的实际内容)
    sio.emit('auth', {'token': 'your_session_token'})

内容的提问来源于stack exchange,提问作者Guilherme Gobbo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:41:10