Introduction
🚀 Help me work seamlessly with open source sharing by sponsoring me on GitHub
An ergonomic and modular Python HTTP Client for advanced and low-level emulation, featuring customizable TLS, JA3/JA4, and HTTP/2 fingerprinting capabilities, powered by wreq.
Features
- Async and Blocking
Clients - Plain bodies, JSON, urlencoded, multipart
- HTTP Trailer
- Cookie Store
- Redirect Policy
- Original Header
- Rotating Proxies
- Connection Pooling
- Streaming Transfers
- Zero-Copy Transfers
- WebSocket Upgrade
- HTTPS via BoringSSL
- Free-Threaded Safety
- Automatic Decompression
- Certificate Store (CAs & mTLS)
Why wreq?
-
When your HTTP requests succeed in a browser but get blocked in Python due to network fingerprint issues, this tool bridges the gap. wreq-python allows you to customize your TLS, JA3/JA4, and HTTP/2 fingerprints to mimic real browsers, making it ideal for web scraping, penetration testing, and security research.
-
The standard HTTP Client, such as requests and httpx, have different network fingerprints from browsers. The main differences lie in TLS handshake, HTTP/2 frame characteristics, and JA3/JA4 fingerprints. Browsers use specific encryption suites and extensions in the TLS handshake, while standard HTTP clients may use different default settings, causing servers to recognize and block these requests.
-
wreq-python uses the BoringSSL library, which is fully sufficient to set TLS fingerprints that match mainstream browsers while maintaining native performance.
-
In addition, the basic functions of wreq-python are similar to those of the standard HTTP Client, offering a wide range of features such as connection pooling, redirection policies, Cookie storage, and streaming transmission, which can meet various complex HTTP request requirements.
Behavior
- 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-python provides fine-grained control over TLS and HTTP/2 extensions and settings for precise browser behavior emulation.
- Device Emulation
TLS and HTTP/2 fingerprints are often identical across various browser models because these underlying protocols evolve slower than browser release cycles. 100+ browser device emulation profiles are maintained in wreq-python.
Available OS emulations
| OS | Description |
|---|---|
| Windows | Windows (any version) |
| MacOS | macOS (any version) |
| Linux | Linux (any distribution) |
| Android | Android (mobile) |
| iOS | iOS (iPhone/iPad) |
Available browser emulations
| Browser | Versions |
|---|---|
| Chrome | Chrome100, Chrome101, Chrome104, Chrome105, Chrome106, Chrome107, Chrome108, Chrome109, Chrome110, Chrome114, Chrome116, Chrome117, Chrome118, Chrome119, Chrome120, Chrome123, Chrome124, Chrome126, Chrome127, Chrome128, Chrome129, Chrome130, Chrome131, Chrome132, Chrome133, Chrome134, Chrome135, Chrome136, Chrome137, Chrome138, Chrome139, Chrome140, Chrome141, Chrome142, Chrome143, Chrome144, Chrome145 |
| Safari | SafariIos17_2, SafariIos17_4_1, SafariIos16_5, Safari15_3, Safari15_5, Safari15_6_1, Safari16, Safari16_5, Safari17_0, Safari17_2_1, Safari17_4_1, Safari17_5, Safari18, SafariIPad18, Safari18_2, SafariIos18_1_1, Safari18_3, Safari18_3_1, Safari18_5, Safari26, Safari26_1, Safari26_2, SafariIos26, SafariIos26_2, SafariIPad26, SafariIPad26_2 |
| Firefox | Firefox109, Firefox117, Firefox128, Firefox133, Firefox135, FirefoxPrivate135, FirefoxAndroid135, Firefox136, FirefoxPrivate136, Firefox139, Firefox142, Firefox143, Firefox144, Firefox145, Firefox146, Firefox147 |
| OkHttp | OkHttp3_9, OkHttp3_11, OkHttp3_13, OkHttp3_14, OkHttp4_9, OkHttp4_10, OkHttp4_12, OkHttp5 |
| Edge | Edge101, Edge122, Edge127, Edge131, Edge134, Edge135, Edge136, Edge137, Edge138, Edge139, Edge140, Edge141, Edge142, Edge143, Edge144, Edge145 |
| Opera | Opera116, Opera117, Opera118, Opera119 |
Performance
-
wreq-python This is designed to achieve high performance, leveraging the efficiency of the BoringSSL library in TLS operations and optimized HTTP/2 processing. Although its running speed may not be comparable to that of low-level languages like Rust or C++, it offers significant performance improvements compared to traditional Python HTTP clients.
-
In terms of API module design, wreq-python adopts dual support for both asynchronous and blocking clients, allowing developers to choose the appropriate programming model according to their needs.
-
API calls have made every effort to release the GIL, which means that performance can be maximally exploited. In terms of data transmission, wreq-python implements Python's Buffer Protocol, supporting zero-copy transmission, further enhancing performance.
License
Licensed under either of Apache License, Version 2.0 (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, shall be licensed as above, without any additional terms or conditions.