https://github.com/0x676e67/wreq
An ergonomic Rust HTTP Client with TLS fingerprint
https://github.com/0x676e67/wreq
akamai boringssl crawler fingerprint http http-client http2 https impersonate ja3 ja4 requests rust scraper tls tls-client tls-fingerprint web-scraper web-scraping websocket
Last synced: 2 months ago
JSON representation
An ergonomic Rust HTTP Client with TLS fingerprint
- Host: GitHub
- URL: https://github.com/0x676e67/wreq
- Owner: 0x676e67
- License: apache-2.0
- Created: 2024-09-19T13:00:39.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-08-02T01:38:45.000Z (2 months ago)
- Last Synced: 2025-08-02T03:44:30.056Z (2 months ago)
- Topics: akamai, boringssl, crawler, fingerprint, http, http-client, http2, https, impersonate, ja3, ja4, requests, rust, scraper, tls, tls-client, tls-fingerprint, web-scraper, web-scraping, websocket
- Language: Rust
- Homepage: https://docs.rs/wreq
- Size: 5.25 MB
- Stars: 397
- Watchers: 4
- Forks: 54
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# wreq
[](https://github.com/0x676e67/wreq/actions/workflows/ci.yml)
[](./LICENSE)
[](https://crates.io/crates/wreq)
[](https://docs.rs/wreq)> 🚀 Help me work seamlessly with open source sharing by [sponsoring me on GitHub](https://github.com/0x676e67/0x676e67/blob/main/SPONSOR.md)
An ergonomic all-in-one HTTP client for browser emulation with TLS, JA3/JA4, and HTTP/2 fingerprints.
## Features
- Plain bodies, JSON, urlencoded, multipart
- Cookie Store
- Redirect Policy
- Original Header
- Rotating Proxies
- Certificate Store
- Tower Middleware
- WebSocket Upgrade
- HTTPS via BoringSSL
- HTTP/2 over TLS Emulation## Example
This asynchronous example utilizes [Tokio](https://tokio.rs) with optional features enabled, requiring the following configuration in `Cargo.toml`:
```toml
[dependencies]
tokio = { version = "1", features = ["full"] }
wreq = "5"
wreq-util = "2"
```And then the code:
```rust,no_run
use wreq::Client;
use wreq_util::Emulation;#[tokio::main]
async fn main() -> wreq::Result<()> {
// Build a client
let client = Client::builder()
.emulation(Emulation::Firefox136)
.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(())
}
```## Emulation
- **HTTP/2 over TLS**
Due to the complexity of TLS encryption and the widespread adoption of HTTP/2, browser fingerprints such as **JA3**, **JA4**, and **Akamai** cannot be reliably emulated using simple fingerprint strings. Instead of parsing and emulating these string-based fingerprints, `wreq` provides fine-grained control over TLS and HTTP/2 extensions and settings for precise browser behavior emulation.
- **HTTP/3 over QUIC**
HTTP/3 over QUIC is a work in progress. Due to the complexity of QUIC and the evolving ecosystem, full HTTP/3 emulation is not yet available in `wreq`. If you'd like to accelerate development, please consider sponsoring the project. Progress is tracked at [issue #840](https://github.com/0x676e67/wreq/issues/840).
- **Device Emulation**
Most browser device models share identical TLS and HTTP/2 configurations, differing only in the `User-Agent` string. Common browser device emulation templates are maintained in [`wreq-util`](https://github.com/0x676e67/wreq-util), a companion utility crate.
## Building
Avoid compiling with packages that depend on `openssl-sys`, as it shares the same prefix symbol with `boring-sys`, potentially leading to [link failures](https://github.com/cloudflare/boring/issues/197) and other issues. Even if compilation succeeds, using both `openssl-sys` and `boring-sys` together can result in memory segmentation faults. Until the upstream Boring resolves these linking conflicts, using `rustls` is the best workaround.
Install the dependencies required to build [BoringSSL](https://github.com/google/boringssl/blob/master/BUILDING.md#build-prerequisites)
```shell
sudo apt-get install build-essential cmake perl pkg-config libclang-dev musl-tools git -ycargo build --release
```This GitHub Actions [workflow](.github/compilation-guide/build.yml) can be used to compile the project on **Linux**, **Windows**, and **macOS**.
## License
Licensed under either of Apache License, Version 2.0 ([LICENSE](./LICENSE) or http://www.apache.org/licenses/LICENSE-2.0).
## Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the [Apache-2.0](./LICENSE) license, shall be licensed as above, without any additional terms or conditions.
## Sponsors
[CapSolver](https://www.capsolver.com/?utm_source=github&utm_medium=banner_repo&utm_campaign=wreq) leverages AI-powered Auto Web Unblock to bypass Captchas effortlessly, providing fast, reliable, and cost-effective data access with seamless integration into Colly, Puppeteer, and Playwright—use code **`RQUEST`** for a 6% bonus!
## Accolades
A hard fork of [reqwest](https://github.com/seanmonstar/reqwest).