Découvrez comment utiliser cURL avec Proxy

Andrei Ogiolan le 05 décembre 2022

Qu'est-ce que cURL ?

blog-image

Afin d'atteindre le but de cet article, qui est d'apprendre à utiliser 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 les développeurs afin de récupérer des données d'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 en une seule ligne de commande. Vous devez tout d'abord ouvrir un terminal et taper curl suivi du lien d'un site web, par exemple :

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

Félicitations, vous avez effectué votre première requête à l'aide de cURL. Cette simple commande demande des informations au serveur, comme le fait un navigateur traditionnel, et renvoie le code HTML de la page. Tous les sites web ne renvoient pas forcément du HTML, il existe des points de terminaison qui renvoient des données sous forme d'objet JSON. Prenons l'exemple suivant :

$ 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 renvoient du HTML ou du JSON lorsque vous exécutez 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 pour être maîtrisé. 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

Ceci vous montrera quelques 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 que vous pouvez définir pour cURL, il s'agit d'un menu divisé en catégories. Vous avez probablement deviné que pour obtenir toutes les options, vous devez exécuter :

curl --help all

Cependant, l'utilisation de cURL seul présente certaines limites quant au nombre de serveurs que nous pouvons choisir pour 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 à ce moment-là que nous avons besoin d'un proxy, qui agit comme un intermédiaire entre nous et le serveur cible.

Qu'est-ce qu'une procuration ?

Le concept de serveur proxy n'est pas difficile à comprendre. Comme nous l'avons déjà mentionné, un serveur proxy est un intermédiaire entre un client qui demande une ressource et le serveur qui fournit cette ressource. Les serveurs mandataires sont conçus pour nous permettre d'obtenir des données de n'importe où. Pour mieux comprendre ce concept, supposons que nous ayons un serveur appelé Bob qui possède certaines 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 y remédier ? Nous envoyons notre demande à un serveur mandataire situé en Europe et non à Bob, et nous indiquons au serveur mandataire que nous voulons obtenir des données de Bob. Le serveur mandataire enverra la demande à Bob et Bob renverra les données au serveur mandataire puisque celui-ci se trouve en Europe. Le serveur mandataire nous renverra alors les données de Bob.

C'est ainsi que fonctionnent les proxys. Un autre grand cas d'utilisation d'un proxy est par exemple lorsque nous voulons obtenir des données qui contiennent des prix dans une devise spécifique afin d'éviter toute confusion. Pour une meilleure compréhension des proxy, je vous recommande vivement de consulter Wikipedia.

Configuration du proxy

Pour utiliser un proxy, vous aurez probablement besoin d'un hôte, d'un port, d'un utilisateur, d'un mot de passe et d'une URL cible pour laquelle vous souhaitez obtenir des données. Pour cet exemple, j'utiliserai un proxy fourni par WebScrapingAPI pour effectuer des requêtes. Vous pouvez trouver plus d'informations à ce sujet ici. WebScrapingAPI n'est pas un fournisseur de proxy, c'est un service de web scraping qui fournit des proxys à la place. Dans nos exemples, notre configuration sera la suivante :

  • Nom d'hôte du proxy : proxy.webscrapingapi.com
  • Port proxy : 80
  • Nom d'utilisateur du proxy : webscrapingapi.proxy_type=datacenter.device=desktop
  • Proxy password: <YOUR-API-KEY-HERE> // you can get one by registering here
  • URL cible : http://httpbin.org/get

Veuillez noter que certains fournisseurs de proxy peuvent exiger d'autres schémas d'authentification.

Comment utiliser cURL avec un proxy ?

Puisque nous avons abordé cURL et les proxys, nous sommes maintenant prêts à les combiner et à faire des requêtes en utilisant un proxy, ce qui est un processus assez simple. Nous devons d'abord nous authentifier, puis nous pouvons utiliser le proxy.

Authentification par proxy dans cURL

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

$ 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 et quelques autres propriétés :

​​{
"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 déjà le constater, l'origine que vous recevez en retour n'est pas votre adresse IP, mais l'adresse du serveur proxy. De plus, vous pouvez exécuter la commande sans 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 ensuite invité à saisir votre mot de passe :

Entrez le mot de passe du proxy pour l'utilisateur 'webscrapingapi.proxy_type=datacenter.device=desktop' :

Vous pouvez maintenant taper votre clé API sans l'exposer dans le terminal, ce qui rend l'ensemble du processus plus sûr. De plus, taper vos identifiants, votre hôte et votre port à chaque fois que vous voulez exécuter une commande cURL via un proxy n'est pas forcément idéal, surtout si vous voulez exécuter plusieurs commandes via un proxy et que vous utilisez le même fournisseur de proxy. 

Bien sûr, vous pouvez stocker vos informations d'identification 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 plus loin.

Utilisation de cURL avec un proxy via des variables d'environnement

Une variable d'environnement est un objet qui stocke une valeur modifiable dans la mémoire et qui peut être utilisée par un ou plusieurs logiciels. Dans ce cas particulier, nous pouvons passer à cURL une variable appelée http_proxy ou https_proxy qui contient les détails de notre proxy et que nous n'aurons pas besoin de 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 appeler votre variable http_proxy ou https_proxy pour que cURL comprenne de quoi vous parlez. C'est tout, maintenant vous n'avez plus besoin de passer vos identifiants à chaque exécution et vous pouvez lancer cURL aussi simplement que cela :

$ curl http://httpbin.org/get

Nous obtiendrons 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 le voyez probablement, l'adresse IP est l'adresse du proxy, ce qui confirme que vous avez fait du bon travail en configurant votre proxy. A ce stade, nous pouvons lancer 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 avez besoin d'envoyer une requête spécifique sans proxy, vous n'avez pas à vous soucier de supprimer la valeur de la variable http_proxy. En tant qu'outil sophistiqué disposant de nombreuses options, cURL peut s'en charger 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 se faire de la manière suivante :

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

Et cela nous rendra notre adresse IP, pas les proxies.

Résumé

En conclusion, l'utilisation de cURL avec un proxy est un excellent moyen de contourner les filtres de géolocalisation, d'étendre le nombre de ressources que nous pouvons extraire des serveurs web et est un bon point de départ pour aborder des sujets tels que le web-scraping où nous avons besoin d'utiliser des proxies afin d'être en mesure d'obtenir certaines données ou de les recevoir dans le format que nous voulons.J'espère que vous avez trouvé cet article utile pour apprendre à utiliser cURL avec un proxy et que vous allez jouer avec et construire vos propres scripts qui extraient des données à partir de serveurs qui utilisent des filtres de géolocalisation.

Nouvelles et mises à jour

Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.

We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

vignette
GuidesComment récupérer les données des produits Amazon : Un guide complet des meilleures pratiques et des outils

Explorez les complexités du scraping des données de produits Amazon avec notre guide approfondi. Des meilleures pratiques aux outils tels que l'API Amazon Scraper, en passant par les considérations juridiques, apprenez à relever les défis, à contourner les CAPTCHA et à extraire efficacement des informations précieuses.

Suciu Dan
avatar de l'auteur
Suciu Dan
15 minutes de lecture
vignette
GuidesTutoriel Scrapy Splash : Maîtriser l'art du scraping de sites web rendus en JavaScript avec Scrapy et Splash

Apprenez à récupérer des sites web dynamiques en JavaScript à l'aide de Scrapy et de Splash. De l'installation à l'écriture d'un spider, en passant par la gestion de la pagination et des réponses Splash, ce guide complet propose des instructions pas à pas pour les débutants comme pour les experts.

Ștefan Răcila
avatar de l'auteur
Ștefan Răcila
6 minutes de lecture
vignette
GuidesApprendre à contourner la détection de Cloudflare avec le meilleur navigateur Selenium

Apprenez quel est le meilleur navigateur pour contourner les systèmes de détection de Cloudflare lorsque vous faites du web scraping avec Selenium.

Mihnea-Octavian Manolache
avatar de l'auteur
Mihnea-Octavian Manolache
9 minutes de lecture