skillfed

wreq

An ergonomic Python HTTP Client with TLS fingerprint

wreq v0.12.1 299.8K downloads/30d#7,852 on PyPI1,423
Permissive license Apache-2.0 Active released

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 wreq

uv

uv add wreq

poetry

poetry add wreq

Installing 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

Development Status :: 5 - Production/StableIntended Audience :: DevelopersOperating System :: MacOSOperating System :: Microsoft :: WindowsOperating System :: POSIXOperating System :: UnixProgramming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Programming Language :: Python :: Implementation :: CPythonProgramming Language :: Python :: Implementation :: PyPyProgramming Language :: RustTopic :: Software Development :: Libraries :: Python Modules

Tags

HTTP client TLS fingerprintingJA3 JA4 browser emulationasync HTTP client PythonHTTP/2 protocol matchingweb scraping HTTP clientcustom TLS cipher suitesanti-bot HTTP client
tls-fingerprintinganti-botasync-http

More Python Modules packages