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

使用Socket.io/WS库连接WebSocket返回403错误排查求助

解决方案
  • 调整传输配置:Socket.IO 服务默认要求先通过 HTTP 长轮询完成握手,拿到会话标识后才允许升级 WebSocket,你当前强制仅用 WebSocket 传输,跳过了握手环节会被服务端直接返回403。将配置中的 transports 字段修改为 ["polling", "websocket"] 即可。
  • 补充请求凭证:目标站点存在反爬防护,仅携带 UA 和 Origin 不足以通过校验。你需要先在浏览器中正常访问目标站点,完成人机验证后,抓取浏览器发起 WebSocket 请求时携带的全部 Cookie,将 Cookie 字段补充到 extraHeaders 配置中,尤其是 Cloudflare 校验所需的 cf_clearance 以及站点自身的会话 Cookie。
  • 显式配置路径:避免客户端 URL 解析异常,建议在配置中单独添加 path: "/socket.io/" 字段,和服务端路径保持一致。
  • 校验版本兼容性:如果目标服务端使用的是 Socket.IO v3/v4 版本,和你当前使用的 v2.4.0 客户端默认不兼容,也会触发403错误,可尝试将客户端升级到和服务端匹配的版本。
修正后参考代码
const Io = require("socket.io-client"); // 建议先确认服务端版本,匹配对应的客户端版本

async function wsConnect(){
  const socket = Io('wss://csgoexo.com', {
    transports: ["polling", "websocket"],
    path: "/socket.io/",
    extraHeaders: {
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36",
      "Origin": "https://csgoexo.com",
      // 补充你从浏览器中抓取到的完整Cookie
      "Cookie": "cf_clearance=xxx; 站点会话Cookie=xxx;"
    }
  });

  socket.on('connect', () => {
    console.log('Connected!', {id: socket.id});
  });
  socket.on("disconnect", (reason) => {
    console.log('Disconnected', reason)
    if (reason === "io server disconnect") {
      socket.connect();
    }
  });
  socket.on("connect_error", (error) => {
    console.log(error)
  });
}

wsConnect();

注意:获取Cookie时使用的浏览器UA、IP地址需要和你发起请求的环境完全一致,否则反爬策略仍会拦截请求返回403。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:18:02