Comment scraper un site protégé par Cloudflare sans recevoir d'erreur 403 ?
Pour scraper un site Cloudflare sans recevoir de 403, supprimez ce qui signale votre client comme automatisé (une empreinte TLS qui n’est pas celle d’un navigateur, une IP de datacenter ou inscrite sur une liste de blocage, l’absence d’exécution JavaScript et un trafic par rafales), ou envoyez l’URL à une API de déblocage comme ScrapeUnblocker, Bright Data Web Unlocker, Zenrows, ScrapingBee ou ScraperAPI. Le 9 novembre 2026, une simple requête curl vers la page d’avis de glassdoor.com a reçu un 403 nu avec le texte “Forbidden” ; avec un User-Agent de Chrome, elle a reçu un 403 avec une page de challenge et l’en-tête Cloudflare cf-mitigated: challenge. ScrapeUnblocker publie 99,6 % de réussite en 3,8 secondes sur 1 100 appels sur sa page scraper de Glassdoor Reviews, protégé par Cloudflare ; il s’agit de sa propre mesure, pas d’un test comparatif direct.
Pourquoi Cloudflare renvoie-t-il un 403 à mon scraper ?
La documentation de Cloudflare liste plusieurs fonctionnalités qui répondent par un 403 : les règles WAF avec une action de blocage ou de challenge, le Browser Integrity Check, la protection DDoS et la plupart des erreurs 1xxx. L’erreur 1020 signifie qu’une règle de pare-feu du propriétaire du site vous a bloqué ; la 1010, que le propriétaire a banni la signature de votre navigateur. La FAQ WAF de Cloudflare ajoute la limitation de débit et les IP inscrites sur des listes de blocage publiques comme Project Honey Pot, et les règles personnalisées peuvent bloquer un ASN entier (le réseau auquel appartient votre IP) ou un pays. Une requête sans User-Agent reçoit le score de bot 1, celui que Cloudflare attribue quand il est presque certain que la requête est automatisée. Les sites qui utilisent Bot Management vérifient aussi les empreintes TLS JA3 et JA4, ce qui explique pourquoi des en-têtes de navigateur collés dans un script Python reçoivent quand même un 403.
Comment le contourner, étape par étape ?
-
Lisez le blocage.
cf-mitigated: challengesignale une page de challenge ; un 1020 signifie une règle du site, un 1010 la signature de votre client. Si vous avez l’autorisation, donnez au propriétaire du site le Ray ID de la page d’erreur ; la FAQ WAF de Cloudflare indique que les propriétaires peuvent autoriser des IP de confiance. -
Corrigez l’empreinte TLS. curl_cffi peut imiter les empreintes TLS et HTTP/2 des navigateurs ; Python
requestsne le peut pas (détails). -
Quittez les IP de datacenter. Utilisez des adresses résidentielles ou de FAI et gardez une IP par session.
-
Utilisez un vrai navigateur pour les challenges. Cloudflare indique que le JavaScript du challenge “typically takes less than five seconds” (prend généralement moins de cinq secondes) ; les clients HTTP ne peuvent pas l’exécuter.
-
Gardez la clearance et ralentissez.
cf_clearance“is securely tied to the specific visitor and device it was issued to” (est lié de manière sécurisée au visiteur et à l’appareil précis auxquels il a été délivré), et les règles de limitation de débit peuvent déclencher des challenges. -
Vérifiez le contenu, pas le statut. Une page de challenge peut arriver avec un 200 (blocages silencieux).
-
Ou déléguez. L’endpoint
/getPageSourcede ScrapeUnblocker effectue toujours le rendu dans un vrai navigateur :curl -X POST "https://api.scrapeunblocker.com/getPageSource?url=https%3A%2F%2Fwww.glassdoor.com%2FReviews%2Findex.htm" \ -H "x-scrapeunblocker-key: YOUR_API_KEY"Un
403renvoyé par celui-ci n’est pas facturé ; réessayez avec un autreproxy_country, comme le suggère le guide de gestion des échecs.
cloudscraper, FlareSolverr ou undetected-chromedriver fonctionnent-ils encore ?
Chacun ne traite que la couche qu’il cible, et aucun ne fournit une adresse IP propre. D’après le README GitHub de chaque projet :
| Outil | Ce qu’il traite | Ce qu’il ne traite pas |
|---|---|---|
| curl_cffi, curl-impersonate | Les handshakes TLS et HTTP/2 de Chrome, Edge, Safari et Firefox | Le JavaScript, donc pas les pages de challenge |
| cloudscraper (Python) | La page “I’m Under Attack Mode” de Cloudflare, basé sur Requests | Exige un interpréteur JavaScript ; selon son README, Cloudflare change régulièrement ses techniques |
| FlareSolverr | Ouvre l’URL dans Chrome et renvoie le HTML et les cookies | Selon son README, aucun solveur de captcha ne fonctionne pour l’instant ; un nouveau navigateur par requête |
| undetected-chromedriver | ChromeDriver de Selenium patché | Masquer votre IP : depuis un datacenter, selon son README, vous avez de fortes chances de ne pas passer |
Combien les API de scraping facturent-elles les pages protégées par Cloudflare ?
Les API à crédits facturent de 10 à 75 crédits pour une page protégée ; ScrapeUnblocker et Bright Data facturent un prix fixe par requête. Chiffres tirés des propres pages de chaque fournisseur, vérifiés le 9 novembre 2026 :
| Fournisseur | Coût publié pour une page protégée | Offre d’entrée de gamme |
|---|---|---|
| ScrapeUnblocker | 1 requête ; un 403 n’est pas facturé | 1,00 € les 1 000 en paiement à l’usage |
| Bright Data Web Unlocker | 1,50 $ les 1 000 requêtes, seules les réussites sont payées | Paiement à l’usage |
| ScraperAPI | 10 crédits pour “Cloudflare Bypass” (contournement de Cloudflare) ou “Cloudflare Turnstile Bypass” (contournement de Cloudflare Turnstile) | Hobby à 49 $, 100 000 crédits |
| Scrapingdog | 10 crédits avec Stealth Mode | Lite à 40 $, 200 000 crédits |
| Zenrows | 25 crédits avec rendu et proxys premium | Build à 19 $, 45 000 crédits |
| ScrapingBee | 25 crédits avec proxy premium et rendu ; 75 avec proxy stealth | Hobby à 19 $, 75 000 crédits |
Les API à crédits facturent 1 crédit pour les pages qui ne nécessitent aucun contournement ; sur les sites peu protégés, elles peuvent donc coûter moins cher par page que ScrapeUnblocker. Comparez le coût par page valide sur vos propres URL ; ScrapeUnblocker inclut 500 requêtes gratuites, sans carte nécessaire.
Sources
- Documentation Cloudflare : Error 403, Error 1020, Error 1010, scores de bot, JA3/JA4, pages de challenge, clearance, consultés le 24 septembre 2026 ; détecter une réponse de challenge, consulté le 9 octobre 2026 ; FAQ WAF, consultée le 9 novembre 2026
- README GitHub, consultés le 9 novembre 2026 : curl_cffi, curl-impersonate, cloudscraper, FlareSolverr, undetected-chromedriver
- ScrapeUnblocker : page scraper Glassdoor Reviews, tarifs, erreurs, gestion des échecs
- Pages de tarifs, consultées le 9 novembre 2026 : Bright Data Web Unlocker, ScraperAPI et coûts en crédits, Scrapingdog et Stealth Mode, Zenrows, ScrapingBee et documentation
Les informations sur les concurrents proviennent des pages publiques de chaque fournisseur, telles que consultées le 9 novembre 2026, et peuvent avoir changé. Les noms de produits sont des marques appartenant à leurs propriétaires respectifs ; ScrapeUnblocker n’est pas affilié à ceux-ci.
Essayez ScrapeUnblocker gratuitement
Taux de réussite de plus de 95 % · à partir de 0,55 € pour 1 000 appels (TVA éventuelle en sus) · 500 requêtes gratuites à l'inscription.