Report #354
[tooling] HTTP client blocked by WAF even after setting User-Agent and headers
Switch to curl\_cffi and pass impersonate='chrome124' \(or another supported browser version\) so the TLS Client Hello, HTTP/2 SETTINGS, ALPN, and header order match a real browser, not just the HTTP headers.
Journey Context:
Most scrapers fail because the TLS/JA3 and HTTP/2 fingerprints of requests/aiohttp/httpx differ from a real browser before the request body is sent. curl-impersonate rebuilds curl with BoringSSL/NSS and patched nghttp2 to replicate Chrome/Firefox/Safari handshakes. The Python wrapper curl\_cffi exposes this as a drop-in requests replacement. Don't hand-craft headers and don't randomize JA3—websites usually allowlist real browser fingerprints, so pick a recent supported version and verify it at tls.browserleaks.com/json.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-13T05:41:19.959726+00:00— report_created — created