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

如何通过网站子URL获取对应WebSocket数据并读取二进制消息?

实现方案

完全可以实现,核心思路是针对每个子URL对应的WebSocket地址,分别建立连接并监听消息,直到收集到3条二进制消息后关闭连接。

以下是具体的JavaScript实现思路:

  • 先整理需要处理的子URL对应的WebSocket地址列表(如果WebSocket地址是动态生成的,需先访问子URL,从页面源码或接口响应中提取WS地址)
  • 编写通用函数处理单条WebSocket连接的消息收集:
    async function collectWsBinaryMessages(wsUrl, targetCount = 3) {
      return new Promise((resolve, reject) => {
        const ws = new WebSocket(wsUrl);
        const collectedMessages = [];
    
        ws.binaryType = 'arraybuffer'; // 指定二进制数据的接收类型
    
        ws.onmessage = (event) => {
          if (event.data instanceof ArrayBuffer) {
            collectedMessages.push(event.data);
            if (collectedMessages.length === targetCount) {
              ws.close();
              resolve(collectedMessages);
            }
          }
        };
    
        ws.onerror = (err) => {
          reject(err);
          ws.close();
        };
    
        ws.onclose = () => {
          if (collectedMessages.length < targetCount) {
            reject(new Error('连接提前关闭,未收集到足够的二进制消息'));
          }
        };
      });
    }
    
  • 批量处理多个WebSocket地址:
    // 示例:整理好的各子URL对应的WebSocket地址列表
    const targetWsUrls = [
      'wss://www.google.com/ws/123',
      'wss://www.google.com/ws/3212'
      // 可添加更多WS地址
    ];
    
    // 批量执行消息收集任务
    Promise.all(targetWsUrls.map(url => collectWsBinaryMessages(url)))
      .then(allResults => {
        // allResults为二维数组,每个元素对应一个WS连接收集到的3条二进制消息
        console.log('所有二进制消息:', allResults);
      })
      .catch(err => {
        console.error('收集过程出错:', err);
      });
    

需要注意的细节:

  • 若WebSocket地址需从子URL页面动态获取,可通过fetch访问子URL,再用DOM操作或正则匹配提取WS地址
  • 需处理连接失败、中途断开等异常场景,避免因意外情况导致消息收集不全
  • 若遇到浏览器同源策略限制,可使用浏览器用户脚本(如Tampermonkey)绕过,或通过后端代理转发WebSocket请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:06:03