Report #384
[tooling] TLS/JA3 fingerprint blocks requests even when headers look like a real browser
Use curl\_cffi and set impersonate='chrome' \(or 'chrome124', 'safari', etc.\) so the TLS handshake, ALPN, extension order, and HTTP/2 SETTINGS match a real browser. Verify at https://tls.browserleaks.com/json that the JA3 hash matches the target browser.
Journey Context:
Bot detectors fingerprint the TLS ClientHello before reading HTTP headers, so a Python requests/httpx client sending a Chrome User-Agent still exposes a non-browser JA3 signature. curl\_cffi wraps libcurl-impersonate to patch the ClientHello, extension order, and HTTP/2 fingerprint exactly. Headers and cookies are secondary; fix transport-layer fingerprinting first or everything else fails. Pre-compiled wheels are available, so you do not need to build curl-impersonate manually.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-13T06:43:39.537674+00:00— report_created — created