Retour au blog
Cas d'utilisation
Andrei Ogiolan5 décembre 20228 min de lecture

Découvrez comment utiliser cURL avec un proxy

Découvrez comment utiliser cURL avec un proxy

Qu'est-ce que cURL ?

Top-down photo of a person using a laptop outdoors on stone pavement with a red overlay about using curl with a proxy

Afin d'aborder le sujet de cet article, à savoir l'utilisation de cURL avec un proxy, nous devons d'abord présenter cURL. Client URL (cURL) est, en bref, une ligne de commande facile à utiliser, conçue pour permettre aux développeurs de récupérer des données depuis un serveur.

Comment utiliser cURL ?

Comme je l'ai déjà mentionné plus haut, l'utilisation de cURL est assez simple et permet d'extraire des informations à l'aide d'une seule ligne de commande. Vous devez d'abord ouvrir un terminal et taper « curl » suivi d'un lien vers un site web, par exemple :

$ curl 'https://www.webscrapingapi.com/'

Félicitations, vous venez d'effectuer votre première requête avec cURL. Cette commande simple demande des informations au serveur, tout comme le ferait un navigateur classique, et renvoie le code HTML de la page. Tous les sites web ne renvoient pas forcément du code HTML ; certains points de terminaison renvoient les données sous forme d'objet JSON. Prenons cet exemple :

$ curl 'https://jsonplaceholder.typicode.com/todos/3'

Tapez cette commande dans votre terminal et vous devriez obtenir cette réponse :

{
  "userId": 1,
  "id": 3,
  "title": "fugiat veniam minus",
  "completed": false
}

La plupart des API vous renverront soit du code HTML, soit du JSON lorsque vous leur envoyez des commandes cURL. Mais ce n’est pas tout ce que cURL peut faire pour nous. En réalité, c’est un outil très sophistiqué qui demande beaucoup de temps à maîtriser. Si vous souhaitez en savoir plus sur cURL, je vous recommande vivement de consulter la documentation de cURL pour mieux comprendre ses paramètres. Vous pouvez également exécuter la commande suivante :

$ curl --help

Cela vous montrera certaines options que vous pouvez définir pour cURL :

Usage: curl [options...] <url>
 -d, --data <data>   HTTP POST data
 -f, --fail          Fail silently (no output at all) on HTTP errors
 -h, --help <category>  Get help for commands
 -i, --include       Include protocol response headers in the output
 -o, --output <file>  Write to file instead of stdout
 -O, --remote-name   Write output to a file named as the remote file
 -s, --silent        Silent mode
 -T, --upload-file <file>  Transfer local FILE to destination
 -u, --user <user:password>  Server user and password
 -A, --user-agent <name>  Send User-Agent <name> to server
 -v, --verbose       Make the operation more talkative
 -V, --version       Show version number and quit

This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".

Comme vous pouvez le constater, ce ne sont même pas toutes les options disponibles pour cURL ; il s'agit d'un menu divisé en catégories. Vous avez sans doute deviné que pour obtenir toutes les options que vous souhaitez exécuter :

$ curl --help all

Cependant, l'utilisation de cURL seul présente certaines limites quant au nombre de serveurs sur lesquels nous pouvons récupérer des données. Par exemple, certains serveurs peuvent utiliser la géolocalisation et refuser de nous fournir les données que nous recherchons en raison de notre emplacement. C'est là que nous avons besoin d'un proxy, qui agit comme un intermédiaire entre nous et le serveur cible.

Qu&#x27;est-ce qu&#x27;un proxy ?

Le concept de serveur proxy n'est pas du tout difficile à comprendre. Comme déjà mentionné ci-dessus, un serveur proxy est comme un intermédiaire entre un client demandant une ressource et le serveur fournissant cette ressource. Les proxys sont conçus pour nous permettre d'obtenir des données de n'importe où. Afin de mieux comprendre ce concept, supposons que nous ayons un serveur appelé Bob qui dispose de données qui nous intéressent, mais que Bob ne fournisse ces données que si nous sommes en Europe, alors que nous sommes aux États-Unis.

Comment faire dans ce cas ? Nous envoyons notre requête à un serveur proxy situé en Europe, et non à Bob, et indiquons au proxy que nous souhaitons obtenir des données de Bob. Le proxy transmettra la requête à Bob, et Bob renverra les données au serveur proxy puisque celui-ci se trouve en Europe. Le serveur proxy nous renverra alors les données provenant de Bob.

C'est le principe de fonctionnement des proxys. Un autre excellent cas d'utilisation d'un proxy est, par exemple, lorsque nous voulons obtenir des données contenant des prix dans une devise spécifique afin d'éviter toute confusion. Pour mieux comprendre les proxys, je vous recommande vivement de consulter Wikipédia.

Configuration du proxy

Pour utiliser un proxy, vous aurez très probablement besoin d'un hôte, d'un port, d'un identifiant, d'un mot de passe et d'une URL cible dont vous souhaitez extraire les données. Pour cet exemple, j'utiliserai un proxy fourni par WebScrapingAPI pour effectuer des requêtes ; vous trouverez plus d'informations à ce sujet ici. WebScrapingAPI n'est pas un fournisseur de proxy, mais un service de web scraping qui fournit des proxys. Dans nos exemples, notre configuration sera la suivante :

  • Nom d'hôte du proxy : proxy.webscrapingapi.com
  • Port du proxy : 80
  • Nom d'utilisateur du proxy : webscrapingapi.proxy_type=datacenter.device=desktop
  • Mot de passe du proxy : <VOTRE-CLÉ-API-ICI> // vous pouvez en obtenir une en vous inscrivant ici
  • URL cible : http://httpbin.org/get

Veuillez noter que certains fournisseurs de proxy peuvent exiger un autre schéma d'authentification.

Comment utiliser cURL avec un proxy ?

Maintenant que nous avons abordé cURL et les proxys, nous sommes prêts à les combiner pour effectuer des requêtes à l'aide d'un proxy, ce qui est un processus assez simple. Nous devons d'abord nous authentifier, puis nous pouvons utiliser le proxy.

Authentification via un proxy dans cURL

L'authentification via un proxy dans cURL est assez simple et peut être effectuée pour notre exemple ci-dessus comme suit :

$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY> --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get

En exécutant cette commande, httpbin nous renverra notre adresse IP, ainsi que d'autres informations :

​​{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.5173.0 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-633af93b-35faf8637f37f7f075f185ec"
  }, 
  "origin": "45.9.120.69", 
  "url": "http://httpbin.org/get"
}

Comme vous pouvez sans doute déjà le constater, l'adresse d'origine renvoyée n'est pas votre adresse IP, mais celle du serveur proxy. De plus, vous pouvez exécuter la commande sans même révéler votre mot de passe dans le terminal. Pour ce faire, procédez comme suit :

$ curl -U webscrapingapi.proxy_type=datacenter.device=desktop --proxy @proxy.webscrapingapi.com:80 http://httpbin.org/get

Vous serez alors invité à saisir votre mot de passe :

Enter proxy password for user 'webscrapingapi.proxy_type=datacenter.device=desktop':

Vous pouvez désormais saisir votre clé API à cet endroit sans l'exposer dans le terminal, ce qui rend l'ensemble du processus plus sécurisé. De plus, saisir vos identifiants, votre hôte et votre port à chaque fois que vous souhaitez exécuter une commande cURL via un proxy peut ne pas sembler idéal, surtout lorsque vous souhaitez exécuter de nombreuses commandes via un proxy et que vous utilisez le même fournisseur de proxy. 

Bien sûr, vous pouvez enregistrer vos identifiants dans un fichier séparé sur votre machine et les copier-coller à chaque fois, mais il existe une approche plus naturelle qui consiste à les transmettre via des variables d'environnement, dont nous parlerons ci-dessous.

Utilisation de cURL avec un proxy via des variables d&#x27;environnement

Une variable d'environnement est comme un objet qui stocke une valeur modifiable en mémoire et qui peut être utilisée par un ou plusieurs logiciels. Dans ce cas précis, nous pouvons transmettre à cURL une variable appelée http_proxy ou https_proxy contenant nos informations de proxy, ce qui nous évitera de les spécifier à chaque exécution de la commande. Vous pouvez le faire en exécutant cette commande :

$ export http_proxy="http://webscrapingapi.proxy_type=datacenter.device=desktop:<YOUR-API-KEY>@proxy.webscrapingapi.com:80"

Veuillez noter que vous devez nommer votre variable http_proxy ou https_proxy pour que cURL comprenne de quoi il s'agit. C'est tout, vous n'avez désormais plus besoin de transmettre vos identifiants à chaque exécution et vous pouvez simplement exécuter cURL de cette manière :

$ curl http://httpbin.org/get

Cela nous donnera le résultat suivant :

{
  "args": {}, 
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", 
    "X-Amzn-Trace-Id": "Root=1-633bf912-66ace1104304ddaf5ea8ac65"
  }, 
  "origin": "132.255.134.104", 
  "url": "http://httpbin.org/get"
}

Comme vous pouvez le constater, l'adresse IP est celle du proxy, ce qui confirme que vous avez parfaitement configuré votre proxy. À ce stade, nous pouvons exécuter n'importe quelle commande cURL sans spécifier les détails du proxy, cURL s'en chargera pour nous.

Désactiver le proxy pour une commande spécifique

Cependant, si vous devez envoyer une requête spécifique sans proxy, vous n'avez pas besoin de vous soucier de supprimer la valeur de la variable http_proxy. En tant qu'outil sophistiqué offrant de nombreuses options, cURL peut s'en charger pour nous grâce à son paramètre proxy, qui lui indique de ne pas utiliser de proxy lors de l'envoi de la requête. Cela peut être fait comme suit :

$ curl --noproxy "*" http://httpbin.org/get

Et cela nous renverra notre adresse IP, et non celle des proxys.

Résumé

En conclusion, l'utilisation de cURL avec un proxy est un excellent moyen de contourner les filtres de géolocalisation, d'augmenter le nombre de ressources que nous pouvons récupérer depuis les serveurs web et constitue un bon point de départ pour aborder des sujets tels que le web scraping, où nous devons utiliser des proxys afin de pouvoir obtenir certaines données ou de les recevoir dans le format souhaité.J'espère que cet article vous aura été utile pour apprendre à utiliser cURL avec un proxy et que vous vous amuserez à l'expérimenter pour créer vos propres scripts permettant d'extraire des données de serveurs utilisant des filtres de géolocalisation.

À propos de l'auteur
Andrei Ogiolan, Développeur Full Stack @ WebScrapingAPI
Andrei OgiolanDéveloppeur Full Stack

Andrei Ogiolan est développeur Full Stack chez WebScrapingAPI ; il participe à l'ensemble du produit et contribue à la mise au point d'outils et de fonctionnalités fiables pour la plateforme.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.