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

NodeJS用ws库连接DexTools WebSocket遇403错误求解决

解决DexTools WebSocket 403拒绝连接问题

问题背景

需要通过NodeJS的ws库连接DexTools的WebSocket端点wss://ws.dextools.io获取实时交易数据,拦截浏览器请求头编写代码后出现Error: Unexpected server response: 403,但浏览器原生WebSocket API可以正常建立连接,已排除Cookie和授权头的影响。

原代码:

import WebSocket from "ws";
import * as crypto from "crypto";

const url = "wss://ws.dextools.io";
const ws = new WebSocket(url, {
    headers: {
        'Pragma': 'no-cache',
        'Origin': 'chrome://newtab',
        'Accept-Language': 'en-US,en;q=0.9',
        'Sec-WebSocket-Key': crypto.randomBytes(16).toString('base64'),
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Upgrade': 'websocket',
        'Cache-Control': 'no-cache',
        'Connection': 'Upgrade',
        'Sec-WebSocket-Version': '13',
        'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits'
    }
});

问题原因及解决方法

出现403是因为请求头缺少或错误设置了浏览器环境的关键标识,服务器通过这些头校验请求合法性:

  • 错误的Origin头:你设置的chrome://newtab并非浏览器访问DexTools时的真实源,服务器会拦截非法Origin的请求,真实Origin应为https://www.dextools.io。
  • 手动设置Sec-WebSocket-Key:ws库会自动生成并处理该字段,手动设置可能不符合服务器的校验逻辑。
  • 缺失Sec-Fetch系列头:浏览器发起请求时会自动携带这些头,服务器可能依赖它们判断请求是否来自合法浏览器环境。

修改后的代码

import WebSocket from "ws";

const url = "wss://ws.dextools.io";
const ws = new WebSocket(url, {
    headers: {
        'Pragma': 'no-cache',
        'Origin': 'https://www.dextools.io',
        'Accept-Language': 'en-US,en;q=0.9',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Upgrade': 'websocket',
        'Cache-Control': 'no-cache',
        'Connection': 'Upgrade',
        'Sec-WebSocket-Version': '13',
        'Sec-WebSocket-Extensions': 'permessage-deflate; client_max_window_bits',
        // 添加浏览器自动发送的Sec-Fetch系列头
        'Sec-Fetch-Site': 'same-site',
        'Sec-Fetch-Mode': 'websocket',
        'Sec-Fetch-Dest': 'empty'
    }
});

// 监听连接成功事件
ws.on('open', () => {
    console.log('WebSocket连接成功');
    // 后续可发送订阅指令
});

// 监听错误事件
ws.on('error', (error) => {
    console.error('连接错误:', error);
});

补充说明

如果修改后仍出现403,可以检查浏览器请求中是否还有其他未添加的请求头(比如Referer设置为https://www.dextools.io/),或者尝试模拟浏览器的请求顺序,确保握手阶段的头完全匹配浏览器的真实请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:05:22