sqdshguy/wreq-js

GitHub: sqdshguy/wreq-js

一个基于 Rust 原生绑定的 Node.js HTTP 客户端,通过模拟浏览器 TLS 指纹来绕过 Cloudflare 等服务的反Bot检测。

Stars: 98 | Forks: 6

# wreq-js [![npm](https://img.shields.io/npm/v/wreq-js.svg)](https://www.npmjs.com/package/wreq-js) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3785ef2f45105035.svg)](https://github.com/sqdshguy/wreq-js/actions/workflows/test.yml) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/sqdshguy/wreq-js) `wreq-js` 是一个 Node.js 和 TypeScript 的 HTTP 客户端,借助来自 [wreq](https://github.com/0x676e67/wreq) 的原生 Rust 绑定,帮助你绕过 Cloudflare 和 DataDome 等服务使用的 TLS 指纹检测。 如果你的请求在浏览器中可以正常工作,但在 Node.js 中因为网络指纹不正确而被拦截,这个库正是为你准备的。 你将保留 fetch 风格的 API,并获得浏览器配置文件级别的网络行为,而无需运行完整的浏览器。 1. 内置浏览器 TLS 和 HTTP 指纹配置,涵盖 Chrome、Firefox、Safari、Edge、Opera 和 OkHttp 家族 2. 原生 Rust 引擎,提供高吞吐量流量,且无浏览器进程开销 3. Fetch 风格的 API,支持 sessions、cookies、proxies 和传输控制 4. WebSocket 辅助函数和构造函数 API,支持 session cookie 和传输重用 5. TypeScript 优先的开发者体验,提供自动生成的类型定义 6. 原生支持 macOS、Linux 和 Windows 平台 常见搜索关键词:cloudflare bypass、datadome bypass、tls fingerprinting、ja3、ja4、browser impersonation、nodejs fetch、typescript http client。 ## 替代方案对比 | 库 | 方案 | API | 备注 | |---------|----------|-----|-------| | **wreq-js** | Rust 原生绑定 ([wreq](https://github.com/0x676e67/wreq)) | Fetch 风格,TypeScript 优先 | 配置标签和网络行为来自原生层 | | [CycleTLS](https://github.com/Danny-Dasilva/CycleTLS) | Go 子进程桥接 | 基于 Promise | 子进程模型 | | [got-scraping](https://github.com/apify/got-scraping) | JavaScript HTTP 客户端自定义 | 基于 `got` | Header 和请求自定义 | | [node-tls-client](https://github.com/Sahil1337/node-tls-client) | 原生共享库绑定 | 自定义 | 行为取决于上游原生层 | | [curl-impersonate](https://github.com/lwthiker/curl-impersonate) | 基于 curl 的工具 | CLI 和绑定 | 二进制/工具工作流 | ## 文档 所有指南、概念和 API 参考均位于: - https://wreq.sqdsh.win (如果你正在寻找示例、sessions/cookies、proxy 使用、流式传输、WebSockets 或完整的 API 接口——全都在这里。) 快速链接: 1. 快速入门:https://wreq.sqdsh.win/quickstart 2. API 概览:https://wreq.sqdsh.win/api-reference/overview 3. Sessions:https://wreq.sqdsh.win/concepts/sessions 4. WebSockets:https://wreq.sqdsh.win/guides/websockets 5. 兼容性矩阵:https://wreq.sqdsh.win/concepts/compatibility-matrix ## 安装 ``` npm install wreq-js # 或 yarn add wreq-js pnpm add wreq-js bun add wreq-js ``` 在 `package.json` 中当前配置的原生目标矩阵包括: 1. macOS (Intel 和 Apple Silicon) 2. Linux (x64 glibc 和 musl,arm64 glibc) 3. Windows (x64) 如果没有适用于你环境的预构建构件,安装过程可能会从源代码编译(需要 Rust 工具链)。 ## 快速开始 ``` import { fetch } from 'wreq-js'; const res = await fetch('https://example.com/api', { browser: 'chrome_142', os: 'windows', }); console.log(await res.json()); ``` 默认情况下,独立的 `fetch()` 调用使用独立的临时 cookie 存储。 当你希望 cookie 在请求之间持久化时,请使用 `createSession()`。 ## 使用 sessions(推荐) 对于**大多数实际工作负载**,请从一个 session 开始并在各个请求中重用它。 这为多步骤流程保留了一个 cookie 和请求上下文。 ``` import { createSession } from 'wreq-js'; const session = await createSession({ browser: 'chrome_142', os: 'windows' }); try { const a = await session.fetch('https://example.com/a'); const b = await session.fetch('https://example.com/b'); console.log(a.status, b.status); } finally { await session.close(); } ``` 更多 session 模式:https://wreq.sqdsh.win ## WebSockets 使用辅助函数可以通过一个 `await` 获取已连接的 socket。 ``` import { websocket } from 'wreq-js'; const ws = await websocket('wss://example.com/ws', { browser: 'chrome_142', headers: { Authorization: 'Bearer token', }, }); ws.onmessage = (event) => { console.log(event.data); }; ws.send('hello'); ws.close(1000, 'done'); ``` 当你需要类似浏览器的 `CONNECTING` 行为时,请使用构造函数。 ``` import { WebSocket } from 'wreq-js'; const ws = new WebSocket('wss://example.com/ws', { browser: 'chrome_142', os: 'windows', }); ws.onopen = () => { void ws.send('connected'); }; ``` 使用 `session.websocket(...)` 以重用来自 session HTTP 调用的 cookies 和传输设置。 ``` import { createSession } from 'wreq-js'; const session = await createSession({ browser: 'chrome_142' }); try { await session.fetch('https://example.com/login', { method: 'POST', body: new URLSearchParams({ user: 'name', pass: 'secret' }), }); const ws = await session.websocket('wss://example.com/ws'); ws.onmessage = (event) => { console.log(event.data); }; } finally { await session.close(); } ``` ## 何时使用 当你的 Node.js HTTP 或 WebSocket 流量由于 TLS 指纹识别或浏览器配置文件不匹配而被拦截时,请使用 `wreq-js`。 当你希望使用熟悉的 fetch 风格 API 来获得 Cloudflare bypass 和 DataDome bypass 风格的网络行为时,这是一个非常合适的选择。 它处理传输和指纹级别的行为,不负责处理 CAPTCHA 验证码,也不负责页面内的 JavaScript 执行。 如果你需要 DOM/JS 执行、CAPTCHA 验证码或完整的浏览器自动化,请改用 Playwright/Puppeteer。 ## 常见问题 1. 为什么使用 sessions? 在多步骤流程中应使用 sessions,以便共享 cookie 和请求上下文。 2. 为什么在某些机器上安装时会从源代码编译? 如果没有匹配的预构建原生构件,npm 可能会从源代码进行构建。 3. 我可以在 session 中使用针对特定请求的代理覆盖吗? 是的,只需在特定的 `session.fetch(...)` 调用上传递 `transport` 即可。`proxy` 字段本身仍然是 session 作用域的。 ## 来源 这是 [will-work-for-meal/node-wreq](https://github.com/will-work-for-meal/node-wreq)(最初命名为 `node-wreq`)的一个维护分支,包含持续的更新、兼容性修复和性能优化。 ## 致谢 - [wreq](https://github.com/0x676e67/wreq) - 带有浏览器模拟功能的 Rust HTTP 客户端 - [wreq-util](https://github.com/0x676e67/wreq-util) - 上游生态系统中的相关浏览器配置文件工具 - [NAPI-RS](https://napi.rs/) - Rust ↔ Node.js 绑定
标签:Cloudflare绕过, DataDome绕过, GNU通用公共许可证, JA3, JA4, MITM代理, Node.js, Rust原生绑定, TLS指纹伪造, TypeScript, WebSocket, Web抓取, 依赖分析, 反爬虫绕过, 可视化界面, 多架构支持, 安全插件, 指纹反检测, 暗色界面, 浏览器指纹模拟, 网络安全, 自动化攻击, 请求伪装, 隐私保护