Guide
Extraire les données de sites publics protégés par Cloudflare (la façon conforme)
Vous ouvrez un catalogue public ou une page d'annonces dans votre navigateur : les données sont là. Votre script appelle la même URL et récupère une page vide. La conclusion habituelle — « c'est bloqué par un CAPTCHA » — est souvent fausse. Le plus souvent, il s'agit d'un contrôle technique d'empreinte qui intervient avant le rendu de la page. Voici ce qui se passe réellement, et comment lire ces pages publiques de façon conforme.
Une « page vide » n'est généralement pas un CAPTCHA
Quand un site protégé par Cloudflare renvoie une page vide ou minimale à un script mais une page complète à votre navigateur, la raison la plus fréquente est un contrôle d'empreinte TLS. Avant tout rendu de contenu, le serveur inspecte la signature technique du client qui se connecte — la forme du handshake TLS, l'ordre des en-têtes, les paramètres négociés. Un vrai navigateur présente une certaine signature ; une bibliothèque de script par défaut en présente une nettement différente. Si la signature ne ressemble pas à celle d'un navigateur ordinaire, le serveur court-circuite et ne renvoie rien d'exploitable.
Le point important : tout se joue au niveau de la connexion, avant tout défi présenté à un humain. Il n'y a aucune énigme à résoudre, aucune case « êtes-vous un robot ». La page n'a simplement jamais été rendue pour ce client. C'est pourquoi on voit des « pages vides » et qu'on conclut à tort à un CAPTCHA — le mécanisme réel est un handshake qui ne correspond pas à ce qu'un navigateur enverrait.
Comment une session à l'empreinte correcte lit la page publique
L'approche conforme est simple : se connecter avec une vraie session navigateur, à l'empreinte correcte, pour que la page publique se charge comme pour n'importe quel visiteur — et le faire à un rythme respectueux.
- Une session navigateur authentique. Utiliser un vrai moteur de navigateur dont le handshake TLS et les en-têtes correspondent à ce que le site attend déjà de ses visiteurs quotidiens, pour que la page publique s'affiche comme prévu.
- Le rythme d'un seul visiteur. Lire les pages à une cadence humaine, sans précipitation — requêtes espacées, crawl-delay respecté — plutôt que d'inonder la source. Une empreinte respectueuse garde l'accès stable, et c'est tout simplement la bonne façon de faire.
- Pages publiques uniquement. Lire ce que tout visiteur peut voir sans se connecter. Rien derrière un compte, rien de personnel — seulement les champs publics et factuels que vous êtes venu chercher.
- API cachée quand elle existe. Une fois le rendu correct obtenu, la page peut exposer le même endpoint JSON interne que je décris dans qu'est-ce qu'une API cachée — généralement la façon la plus propre et la plus légère de lire les données.
Je garde une démonstration du concept d'empreinte en open source : voir le dépôt tls-fingerprint-scraper-demo, qui montre pourquoi un client par défaut récupère une page vide là où une session à l'empreinte correcte lit le contenu public normalement.
Rester du bon côté de la ligne
Lire des données publiques de façon fiable et le faire de façon responsable sont un seul et même travail. Mes règles ne plient pas :
- Lire et respecter les conditions d'utilisation du site. Si elles interdisent l'accès automatisé, je ne donne pas suite.
- Respecter
robots.txtet les limites de débit — toujours, par conception. - N'accéder qu'à des données publiques, factuelles et non personnelles. Pas de contenu derrière une connexion, pas d'informations personnelles.
- Vous exploitez et possédez le flux obtenu ; je le construis pour qu'il se comporte en visiteur courtois de la source.
La version courte
Les pages vides d'un site public protégé par Cloudflare sont généralement un contrôle d'empreinte TLS, pas un CAPTCHA. Une session navigateur à l'empreinte correcte lit la page publique comme n'importe quel visiteur normal, à un rythme respectueux, dans le respect des conditions du site. C'est ainsi que « ça marche dans mon navigateur mais pas dans mon script » devient un flux sur lequel compter.