0x676e67/wreq

GitHub: 0x676e67/wreq

基于 Rust 和 BoringSSL 的高保真 TLS 指纹 HTTP 客户端,通过精细控制 JA3/JA4 和 HTTP/2 指纹来模拟真实浏览器行为以绕过指纹检测。

Stars: 775 | Forks: 100

# wreq [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0aa8c2fc18104222.svg)](https://github.com/0x676e67/wreq/actions/workflows/ci.yml) [![Crates.io License](https://img.shields.io/crates/l/wreq)](https://github.com/0x676e67/wreq/blob/main/LICENSE) [![Crates.io MSRV](https://img.shields.io/crates/msrv/wreq?logo=rust)](https://crates.io/crates/wreq) [![crates.io](https://img.shields.io/crates/v/wreq.svg?logo=rust)](https://crates.io/crates/wreq) [![Discord chat](https://img.shields.io/discord/1486741856397164788.svg?logo=discord)][discord-url] 一个符合人体工程学且模块化的 Rust HTTP 客户端,用于高保真协议匹配,提供可自定义的 TLS、JA3/JA4 以及 HTTP/2 签名功能。 ## 功能特性 - 纯文本请求体、JSON、urlencoded、multipart - HTTP Trailer - Cookie 存储 - 重定向策略 - 原始请求头 - 轮换代理 - Tower 中间件 - WebSocket 升级 - 通过 BoringSSL 支持 HTTPS - HTTP/2 over TLS 对等性 - 证书存储 (CAs & mTLS) ## 示例 以下示例使用 [Tokio](https://tokio.rs) 运行时,并通过将以下内容添加到您的 `Cargo.toml` 来启用可选功能: ``` [dependencies] tokio = { version = "1", features = ["full"] } wreq = "6.0.0-rc.28" wreq-util = "3.0.0-rc.10" ``` 然后是代码: ``` use wreq::Client; use wreq_util::Emulation; #[tokio::main] async fn main() -> wreq::Result<()> { // Build a client let client = Client::builder() .emulation(Emulation::Safari26) .build()?; // Use the API you're already familiar with let resp = client.get("https://tls.peet.ws/api/all").send().await?; println!("{}", resp.text().await?); Ok(()) } ``` ## 行为 - **HTTP/1 over TLS** 在 Rust 生态系统中,大多数 HTTP 客户端依赖于 [http](https://github.com/hyperium/http) 库,该库性能良好,但不会保留请求头的原始大小写。这会导致某些 **WAF** 拒绝带有小写请求头的 **HTTP/1** 请求(参见 [讨论](https://github.com/seanmonstar/reqwest/discussions/2227))。**wreq** 通过完全支持 **HTTP/1** 请求头大小写敏感来解决此问题。 - **HTTP/2 over TLS** 由于 **TLS** 加密的复杂性以及 **HTTP/2** 的广泛普及,像 **JA3**、**JA4** 和 **Akamai** 这样的浏览器指纹无法使用简单的指纹字符串来可靠地模拟。与其解析和模拟这些基于字符串的指纹,**wreq** 提供了对 **TLS** 和 **HTTP/2** 扩展及设置的细粒度控制,以实现精确的浏览器行为模拟。 - **设备模拟** 由于底层协议的演进速度慢于浏览器的发布周期,不同浏览器型号的 **TLS** 和 **HTTP/2** 指纹通常是相同的。[wreq-util](https://github.com/0x676e67/wreq-util) 中维护了 **100 多个浏览器设备模拟配置文件**。 ## 构建 与 **openssl-sys** 一起编译可能会导致与 **boringssl** 发生符号冲突,从而引发[链接失败](https://github.com/cloudflare/boring/issues/197),在 **Linux** 和 **Android** 上,可以通过启用 **`prefix-symbols`** 功能来避免这种情况。 安装 [BoringSSL 构建依赖项](https://github.com/google/boringssl/blob/master/BUILDING.md#build-prerequisites) 并使用以下命令构建: ``` sudo apt-get install build-essential cmake perl pkg-config libclang-dev musl-tools git -y cargo build --release ``` 此 GitHub Actions [工作流](.github/compilation-guide/build.yml) 可用于在 **Linux**、**Windows** 和 **macOS** 上编译项目。 ## 服务 通过寻求[商业支持](mailto:gngppz@gmail.com),帮助维持这个开源项目的持续开发。获取私人指导、专家评审或直接联系维护者,享受根据您的需求量身定制的个性化技术支持。 ## 许可证 根据 Apache 许可证 2.0 版本([LICENSE](./LICENSE) 或 http://www.apache.org/licenses/LICENSE-2.0)授权。 **[仪表板](https://hypersolutions.co?utm_source=github&utm_medium=readme&utm_campaign=wreq)** | **[文档](https://docs.justhyped.dev)** | **[Discord](https://discord.gg/akamai)** ## 致谢 本项目是 [reqwest](https://github.com/seanmonstar/reqwest) 的一个硬分叉。
标签:BoringSSL, cybersecurity, header大小写保持, HTTP/2签名, JA3/JA4, mTLS, Radare2, Rust, SEO, TLS指纹, WAF绕过, WebSocket, Web爬虫, 中间件, 代理轮换, 依赖分析, 协议模拟, 反爬虫对抗, 可视化界面, 底层编程, 开源库, 指纹伪装, 搜索引擎爬虫, 网络流量审计, 网络请求库, 通知系统, 高仿真正文请求