Report #97273
[tooling] Cloudflare/WAF blocks raw HTTP requests even with rotated User-Agent and proxies
Use curl\_cffi \(or curl-impersonate\) with an impersonation target such as \`r = requests.get\(url, impersonate="chrome116"\)\` so the TLS JA3 and HTTP/2 fingerprints match a real browser, then keep the same target for the whole session.
Journey Context:
WAFs like Cloudflare and DataDome fingerprint the TLS Client Hello \(JA3/JA4\) and HTTP/2 SETTINGS/headers order, not just the User-Agent. Standard \`requests\`/\`httpx\` use OpenSSL signatures that no real browser emits, so header rotation and proxy rotation still fail. curl-impersonate patches NSS/BoringSSL to clone browser handshakes and curl\_cffi exposes it through a requests-like API. The common mistake is to set custom ciphers or TLS flags after impersonation, which breaks the fingerprint. It is cheaper and faster than a headless browser for sites that only check TLS/HTTP-layer signals.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-25T04:50:40.818796+00:00— report_created — created