能否通过Main.js或vendor.js获取网站Socket.io认证所需参数?
Socket.io客户端认证连接断开问题排查
我尝试做Socket.io客户端认证已经有段时间了,每次连接都会立刻断开,需要获取开发者工具里的相关信息来排查。目标网站没有公开API,但我的操作符合服务条款,属于合法行为。我怀疑是不是漏了某些参数,想问问能不能通过Main.js或vendor.js找到认证必需的信息。
以下是我使用的代码:
import socketio import json sio = socketio.Client(ssl_verify=False,logger=True,engineio_logger=True) @sio.event def connect(): print("Connected!") sio.emit('auth',{"token": "hshdjdjjdjdjdndhdhdhdhdhdysbsbdbdshd) sio.emit(json.dumps({"authorization":{"session":"gdioebrvrjdbdbdbendbdhd5LZ3NtB3h","isDemo":False}})) @sio.event def connect_error(data): print("The connection failed!\n\n" + data) @sio.event def disconnect(): print("Disconnected!") @sio.on('*') def catch_all(event,data): pass @sio.on('handshake') def on_message(data): print('Handshake',data) sio.emit("instruments/update",{"asset":"GBPUSD","period":60}) sio.emit("indicator/list") sio.emit("drawing/load") sio.emit("pending/list") sio.emit("chart_notification/get") sio.emit("depth/follow","GBPUSD") sio.emit("tick") sio.emit("settings/store",{"chartId":"graph","settings":{"chartId":"graph","chartType":2,"currentExpirationTime":0,"isFastOption":False,"isFastAmountOption":False,"isIndicatorsMinimized":False,"isIndicatorsShowing":True,"isShortBetElement":False,"chartPeriod":4,"currentAsset":{"symbol":"GBPUSD"},"dealValue":1000,"dealPercentValue":1,"isVisible":True,"timePeriod":60,"gridOpacity":8,"isAutoScrolling":1,"isOneClickTrade":True,"upColor":"#0FAF59","downColor":"#FF6251"}}) if __name__ == '__main__' : sio.connect('https://ws.quotex.io/socket.io/', transports=['websocket']) sio.wait()
排查步骤与解决方案
1. 先修复代码里的明显错误
auth事件中的token字符串缺少闭合引号,应改为:"hshdjdjjdjdjdndhdhdhdhdhdysbsbdbdshd"- Socket.io的
emit方法无需手动用json.dumps序列化参数,直接传字典即可,第二个emit的正确写法是:sio.emit('authorization', {"session":"gdioebrvrjdbdbdbendbdhd5LZ3NtB3h","isDemo":False})
2. 从Main.js和vendor.js提取认证逻辑
要找到正确的认证参数和流程,可按以下方法操作:
- 关键词搜索:在两个JS文件中搜索
socket.emit、auth、authorization、handshake等关键词,定位网站原生客户端发送的认证事件格式、顺序,以及携带的额外参数(比如时间戳、签名、关联的请求头参数) - 跟踪连接流程:找到网站初始化Socket连接的代码,查看连接时是否携带额外查询参数,或者是否在连接前有HTTP请求获取临时token/session
- 对比浏览器请求:打开浏览器开发者工具的Network面板,过滤WebSocket连接,对比原生客户端发送的第一条消息格式、参数结构和发送顺序,和自己的代码做匹配
3. 关键注意事项
- Socket.io的事件名必须和服务端要求完全一致,包括大小写
- 部分服务端会校验连接请求头(如
User-Agent、Cookie),可将浏览器中的请求头复制到代码中,在connect时添加:sio.connect('https://ws.quotex.io/socket.io/', transports=['websocket'], headers={ 'User-Agent': '你的浏览器User-Agent', 'Cookie': '网站的会话Cookie' }) - 确保使用的session/token有效,未过期且格式正确
内容的提问来源于stack exchange,提问作者Exboy
相关产品推荐
相关产品推荐

