wreq
Real fingerprint, young edges.
wreq is a Rust HTTP client with browser-grade TLS/HTTP2 emulation. We ran 0.11.3 through its blocking client against the 21-site corpus, no proxy.
It passed 2 of 21 — but the two are interesting. It was the only tool in the entire test, including every browser, to land Yahoo Finance directly: everything else was redirected to Yahoo's consent wall. Its emulation profile evidently threads that needle. Target passed as well.
The sharp edge: Rightmove — a site every other tool passed — answered wreq with HTTP 400. That is a malformed-request-shape response, not bot detection, and it says the defaults still have quirks. The rest of the corpus failed with the standard 403/429/captcha wall, plus a marker miss on AliExpress.
Test conditions
21 real public sites (public-tough-v1), 2026-05-24, no proxy, single residential IP, Linux. Deterministic validators: expected status code plus required and forbidden content markers. Pass rates measure the tool and the network position together. Without a proxy, results reflect how each site's protections treat one plain residential connection as much as the tool itself.
What worked
- +Only tested tool to reach Yahoo Finance without hitting the consent redirect.
- +TLS emulation is real; failures on protected sites look like curl_cffi's, not like plain Requests'.
- +Fast — refusals typically arrived in under 300 ms.
What failed
- −2/21 overall, below curl_cffi's 5/21 on the same day.
- −Rightmove returned HTTP 400 — the only tool that failed that target at all; request-shape defaults need care.
- −Young project surface: Python bindings, docs, and defaults are less settled than curl_cffi's.
When to use it
When curl_cffi's profiles don't fit and you can invest in tuning request shape per target — its fingerprint demonstrably reaches places others can't, but expect to debug defaults.
Promising fingerprint, sharp edges on defaults. Watch it, tune it, don't assume it.
Run evidence
Every attempt below is backed by saved artifacts: request/response metadata, body content, and (for browsers) screenshots. Raw JSON and artifacts live in the runner data directory.
Run data not available in this build.