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 curl
normal, 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.
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