Comment utiliser cURL avec un proxy

Utilisez ce guide détaillé comprenant des extraits de code pour vous aider à démarrer votre parcours avec cURL et les proxies.
15 min de lecture
Using proxies with cURL featured image

Dans cet article, nous allons aborder les points suivants :

Qu’est-ce que cURL ?

cURL, abréviation de « Client URL », est un outil permettant d’envoyer et de recevoir des données sur internet à l’aide d’URL. En tant que projet logiciel, il fournit à la fois une bibliothèque libcurl) et un outil en ligne de commande (curl). Nous allons nous concentrer ici sur cURL, l’outil de ligne de commande pour le transfert de données via la syntaxe URL. 

Le projet prend en charge un large éventail de protocoles, notamment HTTP, HTTPS, FTP, FTPS, SFTP, POP3, POP3S, IMAP, IMAPS, LDAP, LDAPS, SCP, etc. Cela fait de cURL le client HTTP en ligne de commande le plus populaire et le plus utilisé au monde. 

cURL est très polyvalent et représente une solution commune pour effectuer diverses tâches, telles que les requêtes HTTP, le téléchargement de fichiers, le chargement de données et l’interaction avec les API. Il fournit de nombreuses fonctionnalités, telles que la personnalisation des requêtes ou la prise en charge des proxies.

Installation de cURL

Voyons maintenant comment installer cURL sur votre machine.

macOS

Vous n’avez pas besoin d’installer cURL sur macOS. L’outil est déjà inclus dans le système d’exploitation et vous pouvez l’utiliser nativement dans l’application Terminal.

Windows

À partir de Windows 10, Windows est livré avec une copie de cURL. Dans le même temps, la commande cURL est un alias de la commande PowerShell Invoke-WebRequest. Cela signifie que les commandes cURL dans le terminal Windows invoqueront Invoke-Request en coulisses. Pour éviter cela et utiliser cURL à partir de cURL, remplacez « cURL » par « cURL.exe ». De cette manière, PowerShell exécutera cURL et non Invoke-Request.

Par exemple, vous pouvez vérifier la version actuelle de cURL installée sur votre machine Windows dans le terminal avec :

curl.exe --version

Dans PowerShell 7.x, cela devrait donner à peu près cela :

curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDN

Release-Date: 2023-03-20

Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp

Features: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets

Si vous utilisez Windows, remplacez toutes les instances « cURL » dans les commandes de l’article par « cURL.exe ». Sinon, configurez le sous-système Windows pour Linux (WSL) et suivez les instructions ci-dessous.

Linux

Sous Linux, la procédure d’installation de cURL varie en fonction de la distribution que vous utilisez. Les distributions Linux les plus populaires, telles qu’Ubuntu et Fedora, l’intègrent par défaut. Vous pouvez donc utiliser cURL directement dans le terminal.

Dans d’autres distributions, il se peut que cURL ne soit pas inclus. Dans ce cas, vous pouvez l’ajouter en utilisant le gestionnaire de paquets de la distribution. Sur un système d’exploitation basé sur Debian, vous pouvez installer cURL à l’aide de la commande suivante :

sudo apt-get install curl

Ce dont vous avez besoin pour utiliser un proxy dans cURL

Un proxy agit comme un intermédiaire entre le client et le serveur de destination. Il intercepte les requêtes du client, les transmet au serveur, reçoit la réponse du serveur et la renvoie au client. Cette approche intermédiaire accroît l’anonymat et permet d’éviter les restrictions du réseau. En effet, le serveur de destination verra les requêtes comme provenant de l’adresse IP du serveur proxy et de son emplacement, plutôt que les vôtres.

Pour commencer à utiliser cURL avec des services proxy, vous devez d’abord avoir accès à un proxy. Plus précisément, voici la syntaxe d’une URL de proxy :

[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

Celle-ci se compose de :

  • <PROTOCOL> : le protocole à utiliser pour se connecter au serveur proxy. Si aucun protocole n’est spécifié, cURL utilisera par défaut http://.
  • <HOST> : l’adresse IP requise ou l’URL du nom d’hôte du serveur proxy.
  • <PORT> : le numéro de port sur lequel le serveur proxy écoute. Si aucun port n’est spécifié, cURL utilisera 1080 par défaut.
  • <USERNAME> : l’identifiant optionnel à spécifier lorsque l’authentification est requise.
  • <PASSWORD>: le mot de passe optionnel à spécifier lorsque l’authentification est requise.

En ce qui concerne les protocoles de proxy, les plus populaires sont HTTP et HTTPS, suivis de SOCKS.

Il est temps de trouver un bon proxy http !

Vous pouvez en obtenir un gratuitement sur Free Proxy List, comme ci-dessous :

IP Address: 71.19.249.97; Port: 8443

Cela signifie que l’URL du proxy est :

http://71.19.249.97:8443

Cette solution est acceptable à des fins d’apprentissage, mais vous ne pouvez pas vous y fier dans un scénario réel. Les services proxy gratuits sont peu fiables, provoquent souvent des erreurs, lents, gourmands en données et ne fonctionnent pas longtemps. Ne les utilisez pas !

La solution ? Les proxies Premium de Bright Data, le meilleur fournisseur du marché. Abonnez-vous et essayez gratuitement nos proxies réputés pour leur fiabilité.

N’oubliez pas que les solutions premium sont protégées par un système d’authentification. Supposons que le protocole soit HTTP, que l’hôte soit 71.103.203.109, que le port soit 9321, que l’identifiant soit admin-32458 et que le mot de passe soit rTuJ3tEwf. Dans ce cas, l’URL du proxy cURL serait la suivante :

http://admin-32458:@rTuJ3tEwf71.103.203.109:9321

Comment spécifier un proxy HTTP/HTTPS dans cURL

Avant de commencer, lancez la commande ci-dessous dans votre terminal :

curl "https://httpbin.org/ip"

Comme vous pouvez le voir, la syntaxe de base de cURL est la suivante :

curl [optional_commands] <URL>

Une bonne pratique, avec curl, consiste à entourer les URL avec des guillemets doubles pour éviter les problèmes avec les caractères spéciaux.

Exécutez-la et vous devriez obtenir quelque chose comme ceci :

{

  "origin": "194.33.243.7"

}

Le projet HTTPBin vous permet d’obtenir des informations sur vos requêtes HTTP. En détail, le point de terminaison /ip renvoie l’IP d’origine de la requête, c’est-à-dire l’adresse IP de la machine qui a envoyé la requête. En d’autres termes, il renvoie votre adresse IP. 

Après avoir configuré un proxy dans cURL, vous devriez voir l’adresse IP du serveur proxy et non la vôtre.

Il existe plusieurs façons de configurer un proxy dans cURL. Voyons maintenant les approches les plus populaires pour spécifier un proxy HTTP/HTTPS dans cURL.

Utiliser un argument de ligne de commande

cURL propose deux arguments en ligne de commande pour définir l’URL d’un proxy :

  • -x
  • --proxy

Ces deux arguments peuvent être utilisés de manière interchangeable, car ils font exactement la même chose. Le second n’est qu’un alias du premier.

Ainsi, la syntaxe pour utiliser cURL avec des services proxy devient :

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

Ou :

curl --proxy [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

Remarque : les options de la ligne de commande sont sensibles à la casse dans cURL. Par exemple, -x et -X ont deux significations différentes.

Si vous lancez maintenant :

curl -x "http://71.19.249.97:8443" "https://httpbin.org/ip"

Ou son équivalent :

curl --proxy "http://71.19.249.97:8443" "https://httpbin.org/ip"

Vous devriez obtenir :

{

  "origin": "71.19.249.97"

}

L’origine correspond à l’adresse IP du serveur proxy. Cela signifie que le site cible voit la requête comme provenant du proxy, comme on le voulait. C’est parfait !

N’oubliez pas que les serveurs proxy gratuits ont une durée de vie limitée. Il est donc peu probable que le serveur susmentionné soit encore en ligne au moment où vous lirez cet article. En cas d’erreur, essayez un autre proxy.

Utiliser les variables d’environnement

Une autre façon d’utiliser un proxy dans cURL est de définir les deux variables d’environnement suivantes :

  • http_proxy : l’URL du serveur proxy à utiliser pour accéder aux URL utilisant le protocole HTTP.
  • https_proxy : l’URL du serveur proxy à utiliser pour accéder aux URL utilisant le protocole HTTPS.

Sous macOS et Linux, vous pouvez définir ces deux environnements avec la syntaxe ci-dessous :

export http_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

export https_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Ainsi, les deux commandes deviendront :

export http_proxy="http://71.19.249.97:8443"

export https_proxy="http://71.19.249.97:8443"

Sous Windows, vous devez utiliser cette syntaxe PowerShell :

$env:http_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

$env:https_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Ensuite, dans notre exemple :

$env:http_proxy = "http://71.19.249.97:8443"

$env:https_proxy = "http://71.19.249.97:8443"

À partir de maintenant, chaque commande cURL passera par les proxies spécifiés sans avoir à utiliser l’option -x :

Encore une fois, cela renverra :

curl https://httpbin.org/ip

{

  "origin": "71.19.249.97"

}

Pour désactiver les proxies curl, désactivez les variables d’environnement avec :

unset http_proxy

unset https_proxy

Ou sous Windows :

$env:http_proxy = ""

$env:https_proxy = ""

curl reviendra à son comportement standard et https://httpbin.org/ip renverra votre adresse IP.

Utilisation d’un fichier de configuration

Vous pouvez spécifier globalement un proxy pour curl en créant un fichier de configuration .curlrc.

Sous Linux et macOS, ouvrez le terminal et naviguez jusqu’à votre répertoire personnel :

cd ~

Accédez ensuite au fichier .cURLrc avec nano :

nano .curlrc

Si le fichier existe déjà, il sera ouvert. Sinon, il sera d’abord créé, puis ouvert.

Ajoutez la ligne suivante au fichier .curlrc :

proxy="http://71.19.249.97:8443"

La syntaxe de cette instruction est la suivante :

proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Sauvegardez le fichier, fermez le terminal et relancez-le. 

Sous Windows, vous devez créer un fichier _curlrc dans le répertoire %APPDATA% avec le même contenu. Collez %APPDATA% dans la barre d’adresse de l’explorateur de fichiers et appuyez sur ENTRÉE pour accéder au répertoire. 

Cela devrait vous amener à C:\Users\<VOTRE_UTILISATEUR>\AppData\Roaming.

À présent, curl utilisera automatiquement le proxy spécifié dans le fichier de configuration :

curl "http://httpbin.org/ip"

Vous obtiendrez :

{

  "origin": "71.19.249.97"

}

Fantastique ! Vous venez d’apprendre à utiliser curl avec des serveurs proxy de trois manières différentes !

Comment configurer les serveurs proxy SOCKS dans cURL

Si vous souhaitez utiliser un proxy SOCKs, la structure de la commande reste la même :

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

La principale différence est que <PROTOCOL> sera socks4, socks4a, socks5 ou socks5h au lieu de http ou https.

Voici un exemple complet d’un proxy SOCKS curl en action :

curl -x "socks5://94.14.109.54:2478" "http://httpbin.org/ip"

Comme vous pouvez vous y attendre, le résultat sera :

{

  "origin": "94.14.109.54"

}

Une autre approche consiste à utiliser les options de ligne de commande --socks4, --socks4a, --socks5 au lieu de -x. Dans ce cas, vous devez définir l’URL du proxy sans identifiant ni mot de passe après l’option, puis les informations d’identification après --proxy-user :

curl --socks4|--socks4a|--socks5 <HOST>[:<PORT>] <URL> --proxy-user <USERNAME>:<PASSWORD>

Par exemple :

curl --socks4 "93.16.238.41:8721" "http://httpbin.org/ip" --proxy-user admin334:kv4NsDgc3

Ceci se connectera à HTTPBin via le proxy 93.16.238.41:8721 socks4 en utilisant admin334 comme identifiant et kv4NsDgc3 comme mot de passe pour l’authentification.

Conseils et astuces à connaître

Dans cette section, vous trouverez des astuces intéressantes et des conseils précieux pour utiliser un proxy avec curl comme un pro.

Activer et désactiver rapidement les proxies

L’idée ici est de définir des alias pour activer et désactiver les proxies par la programmation via des variables d’environnement en utilisant des commandes personnalisées. 

Sous macOS et Linux, vous pouvez le faire en créant un fichier .bashrc. Il s’agit d’un fichier script qui est exécuté à chaque fois que l’utilisateur se connecte.

Déplacez-vous dans votre dossier personnel :

cd ~

Créez ou ouvrez un fichier .bashrc :

nano .bashrc

Ajoutez au fichier ce qui suit :

alias proxyon="export http_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]';export https_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]'"
alias proxyoff="unset http_proxy;unset https_proxy"

Ainsi, dans notre exemple, il s’agirait de :

alias proxyon="export http_proxy='http://71.19.249.97:8443';export https_proxy='http://71.19.249.97:8443'"

alias proxyoff="unset http_proxy;unset https_proxy"

Enregistrez le fichier et redémarrez votre machine.

Vous pouvez maintenant activer et désactiver un proxy curl avec :

proxyon

curl "http://httpbin.org/ip"

# other HTTP requests...

proxyoff

Notez les commandes proxyon et proxyoff personnalisées. Celles-ci effectuent les opérations spécifiées par les alias dans le fichier .bashrc.

Sous Windows, vous pouvez obtenir quelque chose de similaire avec les alias PowerShell.

Ignorer les proxies pour une seule requête

Si vous souhaitez empêcher curl d’utiliser un proxy configuré pour une requête spécifique, vous pouvez utiliser l’argument « --noproxy * » comme ci-dessous :

curl --noproxy "*" <URL>

Cela indique à curl de ne pas utiliser de proxy pour toutes les URL.

Mettez en place un proxy et exécutez :

curl --noproxy "*" "https://httpbin.org/ip"

L’origine résultante contiendra votre adresse IP et non celle du serveur proxy.

Éviter les erreurs de certificat SSL

Lorsque vous utilisez des proxies dans curl, vos requêtes peuvent échouer à cause d’une erreur de certificat SSL. Pour éviter cela, utilisez l’option -k comme dans la syntaxe ci-dessous :

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -k <URL>

L’option -k vous permet d’éviter les erreurs de certificat en autorisant les connexions de serveurs non sécurisés via SSL.

Par exemple, vous pouvez contacter HTTPBin en contournant les problèmes de SSL avec :

curl -x "http://71.19.249.97:8443" -k "https://httpbin.org/ip"

Plus d’informations sur la requête

Lorsqu’une requête curl échoue, il n’est pas facile de comprendre ce qui s’est passé. Pour débuguer l’erreur et voir toutes les opérations effectuées par curl, utilisez l’option -v :

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -v <URL>

Cette option permet d’obtenir des détails sur les connexions établies et les en-têtes utilisés par l’outil :

$curl -x "http://71.19.249.97:8443" -v "https://httpbin.org/ip"

*   Trying 71.19.249.97:8443...

* Connected to 71.19.249.97 (71.19.249.97) port 8443 (#0)

* allocate connect buffer

* Establish HTTP proxy tunnel to httpbin.org:443

> CONNECT httpbin.org:443 HTTP/1.1

> Host: httpbin.org:443

> User-Agent: curl/8.0.1

> Proxy-Connection: Keep-Alive

>

< HTTP/1.0 200 OK

<

* CONNECT phase completed

* CONNECT tunnel established, response 200

* schannel: disabled automatic use of client certificate

* ALPN: offers http/1.1

* ALPN: server accepted http/1.1

* using HTTP/1.1

> GET /ip HTTP/1.1

> Host: httpbin.org

> User-Agent: curl/8.0.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Sat, 26 Aug 2023 10:39:13 GMT

< Content-Type: application/json

< Content-Length: 31

< Connection: keep-alive

< Server: gunicorn/19.9.0

< Access-Control-Allow-Origin: *

< Access-Control-Allow-Credentials: true

<

{

  "origin": "71.19.249.97"

}

* Connection #0 to host 71.19.249.97 left intact

Quels sont les meilleurs proxies pour curl ?

La réponse à cette question dépend de votre cas d’utilisation et de la nature des requêtes curl que vous devez effectuer. Pour trouver la solution adaptée à vos besoins, jetez un coup d’œil aux différents types de proxies disponibles :

  • Proxy de centre de données : ils sont rapides, mais ils peuvent être détectés et bloqués facilement par les sites en raison de leurs plages d’adresses IP identifiables.
  • Proxies résidentiels : ils garantissent un niveau élevé d’anonymat, car ils fournissent des adresses IP provenant d’appareils réels situés dans des endroits spécifiques. Les proxies résidentiels sont parfaits pour accéder à des sites reposant sur des blocs de restriction géographique ou des mesures anti-bots, et pour effectuer du web scraping avec cURL.
  • Proxy de FAI : ils sont rapides, sûrs et très fiables, car ils fournissent des adresses IP à partir d’appareils enregistrés auprès de fournisseurs d’accès à internet. Les proxies ISP représentent une solution parfaite pour la surveillance du référencement, la navigation sur le web et les études de marché.
  • Proxy mobiles : ils fournissent des adresses IP provenant d’appareils mobiles réels pour un niveau élevé d’anonymat. Ils sont utiles pour accéder à des applications, des sites ou des contenus spécifiques aux mobiles.

Ceci n’est qu’un bref récapitulatif, mais vous pouvez en savoir plus dans notre guide sur les différents types d’adresses IP de proxies.

Conclusion

Dans ce guide du proxy cURL, vous avez appris ce qu’est cURL, ses possibilités d’utilisation, et comment configurer un proxy HTTP/HTTPS/SOCKS. Il s’avère que vous ne pouvez pas compter sur cURL avec les services de proxy des fournisseurs gratuits. La principale décision technique à prendre est donc de choisir un bon fournisseur de proxies. Si vous voulez économiser du temps et de l’énergie, optez pour le meilleur du marché : Bright Data.

Bright Data contrôle les meilleurs serveurs proxy du monde, desservant des entreprises du Fortune 500 et plus de 20 000 autres clients. Son réseau mondial de serveurs proxy comprend :

Dans l’ensemble, il s’agit de l’un des réseaux de proxy orientés scraping les plus vastes et les plus fiables du marché.  Rejoignez le plus grand réseau de proxies au monde et profitez d’un essai gratuit.