Skip to content

Introduction

CI PyPI - License Python Version from PEP 621 TOML PyPI Discord chat

🚀 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?

  1. 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.

  2. 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.

  3. wreq-python uses the BoringSSL library, which is fully sufficient to set TLS fingerprints that match mainstream browsers while maintaining native performance.

  4. 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

  1. 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.

  1. 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

  1. 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.

  2. 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.

  3. 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.