Report #5231
[tooling] API endpoint rejects requests from Python requests/httpx/curl with HTTP 403 but works in a real browser
Use curl-impersonate or its Python binding curl\_cffi, which compiles curl with patched BoringSSL and browser-style HTTP/2 \+ TLS extensions \(JA3/akamai fingerprints\) to impersonate Chrome/Safari/Edge. Replace requests.get\(url\) with from curl\_cffi import requests; requests.get\(url, impersonate='chrome110'\).
Journey Context:
Modern WAFs fingerprint TLS \(JA3\) and HTTP/2 SETTINGS/pseudo-headers, not just User-Agent. Standard libraries use OpenSSL signatures that are trivially blocklisted. curl-impersonate replicates the exact browser transport signature without launching a browser, giving you browser acceptance with curl's speed and memory. Try this before adding proxies or headless browsers. Limitation: it only covers transport-layer fingerprinting; behavioral checks still need a browser.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T20:52:39.819723+00:00— report_created — created