0x676e67/wreq
GitHub: 0x676e67/wreq
基于 Rust 和 BoringSSL 的高保真 TLS 指纹 HTTP 客户端,通过精细控制 JA3/JA4 和 HTTP/2 指纹来模拟真实浏览器行为以绕过指纹检测。
Stars: 775 | Forks: 100
# wreq
[](https://github.com/0x676e67/wreq/actions/workflows/ci.yml)
[](https://github.com/0x676e67/wreq/blob/main/LICENSE)
[](https://crates.io/crates/wreq)
[](https://crates.io/crates/wreq)
[][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爬虫, 中间件, 代理轮换, 依赖分析, 协议模拟, 反爬虫对抗, 可视化界面, 底层编程, 开源库, 指纹伪装, 搜索引擎爬虫, 网络流量审计, 网络请求库, 通知系统, 高仿真正文请求