Guide du web scraping avec cURL Impersonate

Apprenez à utiliser cURL Impersonate pour imiter le comportement du navigateur à des fins de web scraping, grâce à des conseils détaillés sur l’utilisation de la ligne de commande et de Python, ainsi que des conseils avancés.
11 min de lecture
web scraping with cURL impersonate blog image

Dans ce guide, vous allez découvrir :

  • Ce qu’est cURL Impersonate
  • Les raisons du projet et son fonctionnement
  • Comment l’utiliser via la ligne de commande
  • Comment l’utiliser en Python
  • Techniques et aspects avancés

C’est parti !

Qu’est-ce que cURL Impersonate ?

cURL Impersonate est une version spéciale de cURL conçue pour imiter le comportement des principaux navigateurs (Chrome, Edge, Safari et Firefox). Dans le détail, cet outil effectue des handshakes TLS et HTTP qui ressemblent beaucoup à ceux des navigateurs réels.

Le client HTTP peut être utilisé soit via l’outil de ligne de commande curl-impersonate , similaire à l’outil de ligne de commande curlnormal, soit comme bibliothèque en Python.

Voici les navigateurs que l’on peut usurper :

Navigateur Système d’exploitation simulé Script wrapper
Chrome 99 Windows 10 curl_chrome99
Chrome 100 Windows 10 curl_chrome100
Chrome 101 Windows 10 curl_chrome101
Chrome 104 Windows 10 curl_chrome104
Chrome 107 Windows 10 curl_chrome107
Chrome 110 Windows 10 curl_chrome110
Chrome 116 Windows 10 curl_chrome116
Chrome 99 Android 12 curl_chrome99_androïde
Bord 99 Windows 10 curl_edge99
Bord 101 Windows 10 curl_edge101
Firefox 91 ESR Windows 10 curl_ff91esr
Firefox 95 Windows 10 curl_ff95
Firefox 98 Windows 10 curl_ff98
Firefox 100 Windows 10 curl_ff100
Firefox 102 Windows 10 curl_ff102
Firefox 109 Windows 10 curl_ff110
Firefox 117 Windows 10 curl_ff117
Safari 15.3 macOS Big Sur curl_safari15_3
Safari 15.5 macOS Monterey curl_safari15_5

Chaque navigateur pris en charge possède un script wrapper spécifique. Cela configure curl-impersonate avec les en-têtes, les indicateurs et les paramètres appropriés pour simuler un navigateur spécifique.

Comment fonctionne curl-impersonate

Lorsque vous envoyez une demande à un site Web via HTTPS, un processus appelé TLS handshake se produit. Au cours de cette poignée de main, les informations relatives au client HTTP sont partagées avec le serveur web, créant ainsi une empreinte TLS unique

Les clients HTTP ont des fonctionnalités et des configurations différentes de celles d’un navigateur standard. Cette différence se traduit par une empreinte TLS qui peut facilement révéler l’utilisation de clients HTTP. Par conséquent, les mesures anti-bot utilisées par le site cible peuvent détecter vos demandes comme étant automatisées et éventuellement les bloquer.

cURL Impersonate résout ce problème en modifiant l’outil standard curl pour que son empreinte TLS corresponde à celle des vrais navigateurs. Voici comment il atteint cet objectif:

  • Modification de la bibliothèque TLS: pour la version Chrome de curl-impersonate, curl est compilé avec BoringSSL, la bibliothèque TLS de Google. Pour la version Firefox, curl est compilé avec le NSS, la bibliothèque TLS utilisée par Firefox.
  • Ajustements de configuration: il modifie la façon dont cURL configure les différentes extensions TLS et options SSL pour imiter les paramètres des navigateurs réels. Il prend également en charge les nouvelles extensions TLS couramment utilisées par les navigateurs.
  • Personnalisation de la prise de contact HTTP/2: elle modifie les paramètres utilisés par cURL pour les connexions HTTP/2 afin de les aligner sur ceux des navigateurs réels.
  • Indicateurs autres que ceux par défaut : il fonctionne avec des indicateurs spécifiques autres que ceux par défaut, tels que --ciphers, --curves et certains en-têtes -H, ce qui permet d’imiter le comportement du navigateur.

Ainsi, curl-impersonate fait apparaître requêtes curl du point de vue du réseau comme si elles avaient été effectuées par un véritable navigateur. C’est utile pour contourner de nombreux mécanismes de détection de bots!

curl-impersonate: didacticiel en ligne de commande

Suivez les étapes ci-dessous pour apprendre à utiliser cURL Impersonate depuis la ligne de commande.

Remarque: Par souci d’exhaustivité, plusieurs méthodes d’installation seront affichées. Cependant, vous ne devez en choisir qu’un. La méthode recommandée consiste à utiliser Docker.

Installation à partir de fichiers binaires précompilés

Vous pouvez télécharger des fichiers binaires précompilés pour Linux et macOS depuis la page versions de GitHub du projet. Ces fichiers binaires contiennent un curl-impersonate compilé statiquement. Avant de les utiliser, assurez-vous que les éléments suivants sont installés:

  • NSS (Network Security Services): ensemble de bibliothèques conçues pour prendre en charge le développement multiplateforme d’applications client et serveur sécurisées. Le NSS est utilisé dans les produits Mozilla tels que Firefox et Thunderbird pour gérer le protocole TLS.
  • Certificats CA: ensemble de certificats numériques qui authentifient l’identité des serveurs et des clients lors de communications sécurisées. Ils garantissent la fiabilité de votre connexion à un serveur en vérifiant que le certificat du serveur a été signé par une autorité de certification reconnue (Certificate Authority).

Pour répondre aux prérequis, sur Ubuntu, exécutez: 

sudo apt install libnss3 nss-plugin-pem ca-certificates

Sur Red Hat, Fedora ou CentOS, exécutez: 

yum install nss nss-pem ca-certificates

Sur Archlinux, lancez: 

pacman -S nss ca-certificates

Sur macOS, exécutez cette commande: 

brew install nss ca-certificates

Vérifiez également que zlib est installé sur votre système, car les paquets binaires précompilés sont gzippés.

Installation via Docker

Les images Docker, basées sur Alpine Linux et Debian, avec curl-impersonate compilé et prêt à l’emploi sont disponibles sur Docker Hub. Ces images incluent le binaire et tous les scripts wrapper nécessaires.

Les images Chrome (*-chrome) peuvent se faire passer pour Chrome, Edge et Safari. Au lieu de cela, les images de Firefox (*-ff) peuvent se faire passer pour Firefox.

Pour télécharger l’image Docker que vous préférez, utilisez l’une des commandes ci-dessous.

Pour la version de Chrome sur Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-chrome

Pour la version de Firefox sur Alpine Linux:

docker pull lwthiker/curl-impersonate:0.5-ff

Pour la version Chrome sur Debian:

docker pull lwthiker/curl-impersonate:0.5-chrome-slim-buster

Pour la version de Firefox sur Debian:

docker pull lwthiker/curl-impersonate:0.5-ff-slim-buster

Une fois téléchargé, comme vous allez le voir, vous pouvez exécuter curl-impersonate à l’aide d’une commande docker run.

Installation à partir de packages de distribution

Sur Arch Linux, curl-impersonate est disponible via le package AUR curl-impersonate-bin.

Sur macOS, vous pouvez installer le package Homebrew non officiel pour la version Chrome à l’aide des commandes suivantes:

brew tap shakacode/brew

brew install curl-impersonate

Utilisation de base

Quelle que soit la méthode d’installation, vous pouvez désormais exécuter une commande curl-impersonate en utilisant la syntaxe suivante:

curl-impersonate-wrapper [options] [target-url]

Ou, de manière équivalente, sur Docker, exécutez quelque chose comme:

docker run --rm lwthiker/curl-impersonate:[curl-impersonate-version]curl-impersonate-wrapper [options] [target_url]

Où :

  • curl-impersonate-wrapper est le wrapper cURL Impersonate à utiliser (par exemple, curl_chrome116, curl_edge101, curl_ff117, curl_safari15_5, etc.).
  • options sont les indicateurs facultatifs qui seront transmis à cURL. 
  • target-url est l’URL de la page Web à laquelle envoyer une requête HTTP.

Soyez prudent lorsque vous spécifiez des options personnalisées car certains indicateurs modifient la signature TLS de cURL, la rendant potentiellement détectable. Pour en savoir plus, consultez notre introduction à CURL.

Notez que les wrappers définissent automatiquement une collection par défaut d’en-têtes HTTP. Pour personnaliser ces en-têtes, modifiez les scripts d’encapsulation en fonction de vos besoins.

Utilisons maintenant curl-impersonate pour envoyer une requête à la page d’accueil de Wikipédia à l’aide d’un wrapper Chrome :

curl_chrome110 https://www.wikipedia.org

Ou, si vous êtes un utilisateur de Docker:

docker run --rm lwthiker/curl-impersonate:0.5-chrome curl_chrome110 https://www.wikipedia.org

Cette fois-ci, le résultat sera :

<html lang="en" class="no-js">

  <head>

    <meta charset="utf-8">

    <title>Wikipedia</title>

    <meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">

<!-- omitted for brevity... -->

Parfait ! Le serveur a renvoyé le code HTML de la page souhaitée comme si vous y accédiez via un navigateur.

Vous pouvez désormais utiliser cURL Impersonate pour le web scraping comme vous le feriez pour le web scraping.

curl-impersonate: Tutoriel Python

L’utilisation de la ligne de commande est idéale pour les tests, mais les processus de web scraping reposent généralement sur des scripts personnalisés écrits dans des langages tels que Python. Découvrez les meilleurs langages de programmation pour le web scraping!

Heureusement, vous pouvez utiliser cURL Impersonate en Python grâce à curl-cffi. Il s’agit d’une liaison Python pour curl-impersonate via cffi. En particulier, curl-cffi peut se faire passer pour les empreintes TLS/JA3 et HTTP/2 des navigateurs pour se connecter à des pages Web sans être bloqué.

Découvrez comment l’utiliser dans la section étape par étape ci-dessous!

Prérequis

Avant de commencer, assurez-vous d’avoir:

  • Python 3.8+ installé sur votre machine
  • Un projet Python avec un environnement virtuel configuré

Facultativement, un IDE Python tel que Visual Studio Code avec l’extension Python est recommandé.

Installation

Installez curl_cfii via pip comme suit:

pip install curl_cfii

Utilisation

curl_cffi fournit à la fois une API curl de bas niveau et une API de type requêtes de haut niveau. Pour en savoir plus sur leur utilisation, consultez la documentation officielle.

En règle générale, vous souhaitez utiliser l’API de type requêtes. Pour ce faire, importez requêtes depuis curl_cffi:

from curl_cffi import requests

Vous pouvez désormais utiliser la version Chrome de cURL Impersonate en Python pour vous connecter à une page Web avec:

response = requests.get("https://www.wikipedia.org", impersonate="chrome")

Print the response HTML with:

print(response.text)

Put it all together, and you will get:

from curl_cffi import requests

# make a GET request to the target page with

# the Chrome version of curl-impersonate

response = requests.get("https://www.wikipedia.org", impersonate="chrome")

# print the server response

print(response.text)

Run the above Python script, and it will print:

<html lang="en" class="no-js">

  <head>

    <meta charset="utf-8">

    <title>Wikipedia</title>

    <meta name="description" content="Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.">

<!-- omitted for brevity... -->

Parfait ! Vous êtes maintenant prêt à effectuer du web scraping en Python, comme vous le feriez avec Requests et Beautiful Soup. Pour plus de conseils, suivez notre guide sur web scraping avec Python.

Utilisation avancée de cURL Impersonate

Il est temps d’explorer quelques usages et techniques avancés!

Intégration de proxies

La simulation des empreintes digitales du navigateur peut ne pas suffire. Les solutions anti-bot peuvent toujours vous bloquer, en particulier si vous effectuez trop de demandes automatisées en peu de temps. C’est là que les proxies entrent en jeu !

En acheminant votre demande via un serveur proxy, vous pouvez obtenir une nouvelle adresse IP et protéger votre identité.

Supposons que l’URL de votre serveur proxy soit:

http://84.18.12.16:8888

cURL Impersonate prend en charge l’intégration de proxies via la ligne de commande à l’aide de l’indicateur -x :

curl-impersonate -x http://84.18.12.16:8888 https://httpbin.org/ip

Pour plus de détails, lisez comment définir un proxy dans cURL.

https://www.youtube.com/watch?v=oadUjiVxDFY&

En Python, vous pouvez configurer un proxy de la même manière que vous le feriez pour requêtes:

from curl_cffi import requests

proxies = {"http": "http://84.18.12.16:8888", "https": "http://84.18.12.16:8888"}

response = requests.get("https://httpbin.org/ip", impersonate="chrome", proxies=proxies)

Pour plus d’informations, consultez comment intégrer un proxy aux requêtes Python.

Intégration à Libcurl

libcurl-impersonate est une version compilée de libcurl qui inclut les mêmes fonctionnalités de cURL Impersonate. Il propose également une API étendue pour ajuster les détails TLS et les configurations d’en-tête.

libcurl-impersonate peut être installé à l’aide du package précompilé . Son objectif est de faciliter l’intégration de cURL Impersonate dans les bibliothèques de différents langages de programmation, tels que le package Python curl-cffi .

Conclusion

Dans cet article, vous avez appris ce qu’est cURL Impersonate, comment il fonctionne et comment l’utiliser à la fois via la CLI et en Python. Vous comprenez maintenant qu’il s’agit d’un outil permettant d’effectuer des requêtes HTTP tout en simulant l’empreinte TLS des navigateurs du monde réel.

Le problème est que les solutions anti-bots avancées telles que Cloudflare peuvent toujours détecter vos demandes comme provenant d’un bot. La solution ? L’API Scraper de Bright Data, une solution de scraping complète, tout-en-un de nouvelle génération.

L’API Scraper fournit tout ce dont vous avez besoin pour réaliser des requêtes web automatisées avec cURL ou un autre client HTTP. Cette solution complète gère les empreintes digitales du navigateur, la résolution des CAPTCHA et la rotation des adresses IP pour vous permettre de contourner toutes les technologies anti-bot. Il n’a jamais été aussi simple de créer des requêtes automatisées !

Inscrivez-vous dès maintenant pour bénéficier d’un essai gratuit de l’infrastructure de web scraping de Bright Data ou discutez de nos solutions de scraping avec l’un de nos experts en données.

Aucune carte de crédit requise