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

Python如何与qxbroker的WebSocket服务完成握手及身份认证

问题原因分析
  • 你对接的是Socket.IO v3协议的服务,不是原生裸WebSocket服务,Socket.IO在原生WebSocket之上封装了自有帧格式和握手逻辑,直接用原生websocket库连接会缺少初始的Socket.IO握手步骤,服务端会主动断连。
  • 你发送认证数据的逻辑错误:你把已经是字符串格式的Socket.IO报文又用json.dumps()转了一遍,会导致报文被额外加一层引号,服务端无法识别。
  • 缺失必要的请求头:qxbroker的WebSocket接口会校验Origin、User-Agent等请求头,没有合法请求头会直接被拦截断连。
修复方案
  1. 建议直接使用Socket.IO官方Python客户端库对接,不要手动用原生websocket封装Socket.IO逻辑,避免处理协议细节出错。先安装依赖:
pip install python-socketio==5.8.0 websocket-client
  1. 修复后的代码示例:
import socketio

# 初始化Socket.IO客户端,指定EIO版本为3,匹配服务端要求
sio = socketio.Client(engineio_version=3)

@sio.event
def connect():
    print("连接建立成功,开始发送认证信息")
    # 直接发送authorization事件,不需要手动加42前缀,socketio库会自动封装报文
    sio.emit("authorization", {"session": "oZA1xa5d4DYvNJoe4kZhL911QxxxxxxxxxxsPCSTMO", "isDemo": 1})

@sio.event
def connect_error(data):
    print("连接失败:", data)

@sio.event
def disconnect():
    print("连接已断开")

# 监听所有事件,打印服务端返回的所有消息
@sio.on('*')
def catch_all(event, data):
    print(f"收到事件:{event},数据:{data}")

if __name__ == '__main__':
    try:
        # 连接时添加合法的Origin请求头,匹配qxbroker站点域名
        sio.connect(
            url="wss://ws.qxbroker.com",
            socketio_path="/socket.io",
            transports=["websocket"],
            headers={
                "Origin": "https://qxbroker.com",
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
            }
        )
        sio.wait()
    except Exception as e:
        print("运行错误:", e)
额外注意事项
  • 你使用的session值需要是从qxbroker站点登录后获取的有效session,过期或者无效的session也会导致认证失败被断连。
  • 如果是测试环境,isDemo字段填1即可,正式实盘环境需要改为0,同时对应实盘的session值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:04