Detection¶
How recurl detects anti-bot protection and blocking responses.
Detection Overview¶
recurl analyzes responses to identify when a request has been blocked:
- HTTP Status Code - Check for blocking status codes
- Response Body - Scan for anti-bot service signatures
- Headers - Check for protection-related headers
Status Code Detection¶
Blocking Status Codes¶
| Code | Meaning | Common Source |
|---|---|---|
| 403 | Forbidden | Bot blocks, WAF rules |
| 429 | Too Many Requests | Rate limiting |
| 503 | Service Unavailable | DDoS protection, challenges |
Suspicious Status Codes¶
| Code | Meaning | Notes |
|---|---|---|
| 202 | Accepted | May indicate queued challenge |
| 307 | Temporary Redirect | Often redirects to challenge |
Anti-Bot Service Detection¶
recurl recognizes signatures from major anti-bot services:
Cloudflare¶
Patterns detected:
<title>Just a moment...</title>cf-browser-verification/cdn-cgi/challenge-platform/cf_clearancecookie requirementChecking your browser_cf_chl_opt,_cf_chl_tkcf-turnstile
Headers:
CF-RAYServer: cloudflare
Akamai Bot Manager¶
Patterns detected:
_abckcookie patternsak_bmsc,bm_sz,bm_sv/akam/pathsakamaihd.netreferencessensor_data
PerimeterX / HUMAN Security¶
Patterns detected:
_px3,_px2,_pxvid_pxff,_pxdeperimeterxreferencesPX-Compromisedheaderpxcdn.nethuman.com/px
DataDome¶
Patterns detected:
datadomecookie/referencesgeo.captcha-deliveryct.captcha-deliveryinterstitial.captcha-delivery
Imperva / Incapsula¶
Patterns detected:
incapsulareferencesincap_ses_*cookiesvisid_incap_*cookiesimpervareferencesreese84
Kasada¶
Patterns detected:
kasadareferencesx-kpsdk-*headers/ips.jskpparam
Shape Security / F5 Bot Defense¶
Patterns detected:
shape.comreferencesshapesecurity_imp_apg_r_,_imp_di_pc_x-px-headers
Arkose Labs (FunCaptcha)¶
Patterns detected:
arkoselabsreferencesfuncaptchaarkose.comfc/assets,fc/api
AWS WAF¶
Patterns detected:
aws-wafreferencesawswafx-amzn-waf-*headersaws-waf-token
GeeTest¶
Patterns detected:
geetestreferencesgt_prefixesinitGeetestcaptcha4.js
hCaptcha¶
Patterns detected:
hcaptcha.comreferencesh-captcha
reCAPTCHA¶
Patterns detected:
recaptchareferencesg-recaptchaclassgrecaptchaobjectrecaptcha.netrecaptcha/api
Generic JavaScript Challenge Detection¶
For unknown or custom protections:
Patterns detected:
<noscript>heavy content- "JavaScript is required"
- "enable JavaScript"
- "browser doesn't support JavaScript"
meta http-equiv="refresh"redirects
Detection in Debug Mode¶
Use --recurl-debug to see detection results:
recurl --recurl-debug https://protected-site.com
# [recurl] curl_engine: 403
# [recurl] Detected: Cloudflare challenge
# [recurl] Escalating: impersonation (chrome)
Detection Output¶
| Output | Meaning |
|---|---|
403 Cloudflare | Cloudflare block detected |
403 Akamai | Akamai Bot Manager detected |
403 (unknown) | 403 but no known pattern matched |
JS challenge | JavaScript challenge page |
Bypass Strategy by Service¶
| Service | Impersonation | JS Preflight |
|---|---|---|
| Cloudflare (basic) | ✓ Often works | ✓ Always works |
| Cloudflare (Turnstile) | ✗ | ✓ |
| Akamai | ✓ Sometimes | ✓ |
| PerimeterX | ✗ | ✓ |
| DataDome | ✗ | ✓ |
| Imperva | ✓ Sometimes | ✓ |
| Kasada | ✗ | ✓ |
| AWS WAF | ✓ Often | ✓ |
| CAPTCHA (any) | ✗ | Partial* |
*CAPTCHA challenges may require human interaction.
Adding Custom Detection¶
recurl's detection is pattern-based and can be extended. The detection patterns are in:
Pattern format:
False Positives¶
Sometimes legitimate content may contain anti-bot patterns. recurl only escalates on:
- Status code 403, 429, or 503 AND
- Body pattern match
A 200 response with anti-bot patterns in content won't trigger escalation.
Override Detection¶
If recurl is incorrectly detecting a block: