wreq
An ergonomic Python HTTP Client with TLS fingerprint
What it is and what it does
wreq is a Python HTTP client built on Rust bindings to BoringSSL, designed for high-fidelity protocol matching and browser fingerprint emulation. It provides both async and blocking APIs with support for HTTP/2, custom TLS configuration, and browser emulation profiles—useful for scenarios where standard HTTP clients are detected or blocked by anti-bot systems. The library handles connection pooling, streaming transfers, WebSocket upgrades, automatic decompression, and certificate management.
The package targets developers building web scrapers, API clients, or tools that need to mimic specific browser behavior or avoid detection. It trades some complexity for fine-grained control over TLS and HTTP/2 parameters, rather than relying on simple fingerprint strings. Zero runtime dependencies simplify deployment, though the compiled Rust component requires Python 3.11+ and platform-specific wheels.
Use it for:
- Building web scrapers that need to bypass anti-bot detection by emulating specific browser TLS and HTTP/2 signatures.
- Automating API interactions where the server enforces strict browser fingerprint validation.
- Testing HTTP/2 and TLS protocol handling in applications by emulating different browser profiles.
- Developing tools that require WebSocket support combined with custom TLS configuration.
- Creating high-performance HTTP clients for data collection where connection pooling and streaming matter.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
An HTTP client library for Python with customizable TLS and HTTP/2 fingerprinting, supporting both async and blocking APIs, browser emulation profiles, and features like connection pooling, streaming, and WebSocket upgrades.
Yes, if you need browser fingerprint emulation or custom TLS control for HTTP requests. The library is actively maintained, has no known vulnerabilities, and offers a permissive license. Install friction is moderate due to compiled dependencies, but pre-built wheels cover most platforms. Not necessary for standard HTTP tasks where requests or httpx suffice.
Install
wreq on PyPI
pip
pip install wrequv
uv add wreqpoetry
poetry add wreqInstalling wreq
Before you install
Medium install friction due to compiled Rust bindings and BoringSSL dependency. Pre-built wheels cover most platforms (Linux glibc/musl, macOS, Windows, Android) but require Python 3.11+. Active maintenance with recent releases.
License in practice
Licensed under Apache License 2.0 (permissive), allowing commercial and private use with minimal restrictions—suitable for most projects.
Quickstart
pip install wreq
import asyncio
from wreq import Client, Emulation
async def main():
client = Client(emulation=Emulation.Chrome149)
resp = await client.get("https://example.com")
print(await resp.text())
asyncio.run(main())
Requires Python 3.11 or later. Pre-built wheels available for common platforms; building from source requires BoringSSL build environment (CMake, Rust, Clang).
Verify before relying
- Whether the 100+ browser device emulation profiles are actively maintained and updated for new browser versions.
- Performance benchmark methodology and whether comparisons to requests, httpx, aiohttp, curl_cffi remain current.
- Stability and API compatibility guarantees given the active development status and recent release cycle.
Package facts
| License | Apache-2.0 (permissive) |
| Python support | supports the current Python release (>=3.11) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | none |
| Maintenance | actively maintained — 34 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 299,758/month — #7,852 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: wreq-0.12.1-cp311-abi3-macosx_10_12_x86_64.whl; wreq-0.12.1-cp311-abi3-macosx_11_0_arm64.whl; wreq-0.12.1-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; wreq-0.12.1-cp311-abi3-manylinux_2_34_aarch64.whl; wreq-0.12.1-cp311-abi3-manylinux_2_34_armv7l.whl; wreq-0.12.1-cp311-abi3-manylinux_2_38_i686.whl; wreq-0.12.1-cp311-abi3-musllinux_1_2_aarch64.whl; wreq-0.12.1-cp311-abi3-musllinux_1_2_armv7l.whl; wreq-0.12.1-cp311-abi3-musllinux_1_2_i686.whl; wreq-0.12.1-cp311-abi3-musllinux_1_2_x86_64.whl; wreq-0.12.1-cp311-abi3-win32.whl; wreq-0.12.1-cp311-abi3-win_amd64.whl; wreq-0.12.1-cp311-abi3-win_arm64.whl; wreq-0.12.1-cp314-abi3-android_24_arm64_v8a.whl; wreq-0.12.1-cp314-abi3-android_24_x86_64.whl; wreq-0.12.1-cp314-cp314t-macosx_10_12_x86_64.whl; wreq-0.12.1-cp314-cp314t-macosx_11_0_arm64.whl; wreq-0.12.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; wreq-0.12.1-cp314-cp314t-manylinux_2_34_aarch64.whl; wreq-0.12.1-cp314-cp314t-manylinux_2_34_armv7l.whl
Keywords: http, client, websocket, ja3, ja4
Tags
More Python Modules packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
PyYAMLPyYAML parses and emits YAML 1.1 data format,…
permissive · top 100 on PyPI
pydanticPydantic validates Python data structures…
permissive · top 100 on PyPI
annotated-typesProvides reusable metadata objects for use with…
permissive · top 100 on PyPI
typing-inspectionProvides runtime tools to inspect and…
permissive · top 100 on PyPI
rnetAn HTTP client library with browser…
copyleft · top 15,000 on PyPI
wafer-pyAn anti-detection HTTP client that handles TLS…
permissive · top 15,000 on PyPI
pyreqwestA Rust-based HTTP client for Python with both…
unclear · top 15,000 on PyPI
wrapper-tls-requestsMakes HTTP requests with browser-like TLS…
permissive · top 15,000 on PyPI
curl-cfficurl_cffi provides Python bindings to libcurl…
permissive · top 1,000 on PyPI
impitImpit provides Python bindings to make HTTP…
permissive · top 5,000 on PyPI
primpHTTP client library that mimics real web…
permissive · top 5,000 on PyPI
httprhttpr is a fast HTTP client for Python built on…
permissive · top 5,000 on PyPI
wafw00fIdentifies and fingerprints web application…
permissive · top 15,000 on PyPI
tls-clientAn HTTP client library that mimics the requests…
permissive · top 5,000 on PyPI