Le logiciel libre cURL est l’un des projets open source les plus anciens et les plus appréciés. Écrit en C, ce programme sert à envoyer des données dans les réseaux d’or­di­na­teurs. Le nom cURL renvoie à « client URL ». La licence ouverte accorde un droit d’uti­li­sa­tion à n’importe quelle fin. À l’heure actuelle, cURL est utilisé dans de très nombreux appareils.

Qu’est-ce que cURL ?

Le logiciel cURL dispose de deux com­po­santes. libcurl, la bi­blio­thèque du programme, est l’épine dorsale du transfert de données et supporte les pro­to­coles suivants :

  • DICT
  • FILE
  • FTP
  • FTPS
  • GOPHER
  • HTTP
  • HTTPS
  • IMAP
  • IMAPS
  • LDAP
  • LDAPS
  • POP3
  • POP3S
  • RTMP
  • RTSP
  • SCP
  • SFTP
  • SMB
  • SMBS
  • SMTP
  • SMTPS
  • TELNET
  • TFTP

Le programme d’invite de commande cURL agit quant à lui comme une interface basée sur du texte et interagit avec libcurl via l’invite de commande.

Ce programme est un outil essentiel pour le dé­ve­lop­pe­ment Web car il permet aux dé­ve­lop­peurs de com­mu­ni­quer di­rec­te­ment avec les serveurs plutôt que de devoir passer par un na­vi­ga­teur. Les scripts basés sur les commandes cURL (également appelées « cURL commands » en anglais) sont utilisés pour au­to­ma­ti­ser les processus ainsi que pour procéder à des tests et au débogage.

Comment fonc­tionne cURL ?

Les deux com­po­santes de cURL fonc­tion­nent dif­fé­rem­ment.

Comment libcurl est-il utilisé ?

La bi­blio­thèque du programme libcurl met à dis­po­si­tion des fonc­tion­na­li­tés per­met­tant d’envoyer des données dans des réseaux d’or­di­na­teurs. Il existe des « bindings de langage » (que l’on peut traduire par « liaisons de langage ») pour des douzaines de langages de pro­gram­ma­tion po­pu­laires. Ces bindings per­met­tent à un grand nombre de logiciels com­mu­ni­quant avec des serveurs d’utiliser les fonc­tion­na­li­tés de libcurl.

Comment cURL est-il utilisé ?

Le programme d’invite de commande cURL est utilisé dans le dé­ve­lop­pe­ment Web. La méthode la plus simple consiste à saisir les commandes cURL dans l’invite de commande. Avec le savoir-faire cor­res­pon­dant, vous pourrez ainsi tester et déboguer des serveurs et des API.

Plutôt que de saisir ma­nuel­le­ment les commandes dans l’interface de commande, vous pouvez également les regrouper dans des scripts. Ceci permet de stan­dar­di­ser et d’au­to­ma­ti­ser des opé­ra­tions la­bo­rieuses, qu’il s’agisse du char­ge­ment/du té­lé­char­ge­ment de données, du rem­plis­sage au­to­ma­tique de for­mu­laires ou de la mise en miroir de sites internet entiers.

La structure d’une commande cURL se présente gé­né­ra­le­ment comme suit :

# Structure générale d’une commande cURL
curl [options] <url>

Nous utilisons la forme suivante dans les exemples ci-dessous :

# « Curler » l’URL suivante
url="www.example.com"
curl [options] "$url"

Nous avons placé l’URL dans une variable afin de mettre l’accent sur les options. Ces options dé­fi­nis­sent le fonc­tion­ne­ment de l’appel cURL.

Exemples pratiques de commande cURL sous Linux

Pour pouvoir utiliser les exemples cURL suivants, vous aurez besoin :

  1. d’un or­di­na­teur avec un système d’ex­ploi­ta­tion Linux ou UNIX similaire, y compris macOS
  2. d’un accès à la console ou à l’invite de commande
  3. d’un éditeur de code/éditeur de texte brut pour composer des commandes
Note

Pour composer des commandes, utilisez uni­que­ment un éditeur de code/éditeur de texte brut. Vous ne devez en aucun cas utiliser des logiciels de trai­te­ment de texte comme Word, Ope­nOf­fice ou Li­breOf­fice pour préparer du texte pour l’invite de commande.

Premier test avec cURL

Vérifiez tout d’abord que cURL est installé sur votre système. Pour ce faire, ouvrez une invite de commande et saisissez la commande suivante. Le cas échéant, il vous faudra appuyer sur Entrée pour exécuter le code.

# Vérifier si cURL est installé
curl --version

cURL est installé si vous obtenez un texte com­men­çant par « curl » suivi d’un numéro de version. Si cURL n’est pas installé, veuillez suivre les ins­truc­tions d’« Eve­ry­thing curl » pour installer le programme.

Conseil

Utilisez les commandes « curl --help » et « curl --manual » pour en savoir plus sur l’interface de commande cURL.

Vous devez également ouvrir un nouveau document dans un éditeur de code. Vous pouvez y copier des commandes pour les préparer en vue d’une uti­li­sa­tion dans l’invite de commande. Une fois la commande prête, copiez-la dans l’invite de commande et exécutez-la.

Note

Les commandes utilisées dans l’invite de commande sont très puis­santes. Une commande mal saisie peut po­ten­tiel­le­ment paralyser l’in­té­gra­lité de votre système. Par con­sé­quent, n’exécutez jamais des commandes copiées di­rec­te­ment depuis Internet dans votre invite de commande.

Ouvrez plutôt une fenêtre vide dans un éditeur de code. Vous pouvez y copier les commandes dans un premier temps. Cette étape in­ter­mé­diaire vous oblige à faire une courte pause pendant laquelle vous pouvez vérifier chaque commande et la modifier si né­ces­saire avant de l’exécuter.

Té­lé­char­ger des fichiers avec cURL

Consulter des données avec cURL depuis le serveur

En principe, vous pouvez appeler pra­ti­que­ment n’importe quelle URL à l’aide de cURL. Dans ce cadre, on utilise le verbe « curler » pour décrire le fait d’appeler une URL avec cURL. Testez l’exemple suivant :

# « Curler » le site suivant
site="www.google.com"
curl "$site"

Lorsque vous exécutez le code, une multitude de données s’affiche. Ceci vient du fait que la page d’accueil de Google est restituée sous forme de code HTML en réponse à l’accès cURL. Le code source HTML est affiché di­rec­te­ment dans l’interface de commande sans formatage. Un na­vi­ga­teur est toutefois né­ces­saire pour afficher cor­rec­te­ment le code source. Le plus simple est gé­né­ra­le­ment d’en­re­gis­trer le fichier lo­ca­le­ment.

Conseil

Utilisez la commande « clear » dans l’interface de commande pour vider l’écran. Vous pouvez ainsi vous dé­bar­ras­ser des données gênantes dans l’interface de commande.

Consulter un fichier avec cURL et l’en­re­gis­trer lo­ca­le­ment

Té­lé­char­geons le logo de la page Wikipédia anglaise. L’option « -O » (o majuscule pas zéro) demande à cURL d’utiliser le nom de fichier se trouvant à la fin de l’URL. Grâce à cette option, cURL en­re­gistre lo­ca­le­ment le fichier té­lé­chargé sous le même nom.

# Image du Wikipédia anglais
fichier="https://en.wikipedia.org/static/images/project-logos/enwiki-2x.png"
# Appeler l’image et l’enregistrer localement sous le même nom
curl "$fichier" -O

Comment cURL se comporte-t-il avec une URL ne contenant pas de nom de fichier ? Testez le code suivant :

# Page d’accueil de Google
homepage="www.google.com"
# Consulter la page d’accueil avec l’option -O
curl "$homepage" -O

Comme vous le voyez, une erreur est renvoyée puisque l’URL de la page d’accueil de Google ne contient pas de nom de fichier. Dans ce cas, utilisez l’option « -o » (o minuscule) pour attribuer per­son­nel­le­ment un nom de fichier :

# Page d’accueil de Google
homepage="www.google.com"
# Nom du fichier à écrire
name="homepage-google.html"
# Appeler la page d’accueil et l’enregistrer localement sous le nom choisi
curl "$homepage" -o "$name"

Pour­suivre le té­lé­char­ge­ment avec cURL en cas d’in­ter­rup­tion

Cette situation irritante vous est peut-être familière : alors que vous té­lé­char­giez un programme vo­lu­mi­neux depuis plusieurs heures, le té­lé­char­ge­ment s’in­ter­rompt sou­dai­ne­ment vous obligeant à re­com­men­cer depuis le début. Dans un tel cas, cURL peut vous aider grâce à l’option « -C- » :

# Télécharger un fichier volumineux (génome humain)
fichier="https://ftp.ncbi.nih.gov/genomes/refseq/vertebrate_mammalian/Homo_sapiens/reference/GCF_000001405.39_GRCh38.p13/GCF_000001405.39_GRCh38.p13_genomic.gbff.gz"
# Poursuivre le téléchargement en cas d’interruption
curl -C- -O "$fichier"
Note

Nor­ma­le­ment, l’option « -C - » prend un espace après le C. Il est toutefois plus lisible et plus facile de noter cette option « -C- », ce que nous faisons ici.

Si né­ces­saire, vous pouvez également in­ter­rompre ma­nuel­le­ment un té­lé­char­ge­ment lancé avec cURL. Ceci peut notamment s’avérer utile pour les gros fichiers lorsque vous devez quitter votre domicile et emporter votre or­di­na­teur portable.

Conseil

Vous pouvez in­ter­rompre un appel cURL en cours. Pour cela, appuyez sur Ctrl+C, à plusieurs reprises si né­ces­saire.

Com­mu­ni­quer avec le serveur via cURL

La fonc­tion­na­lité de té­lé­char­ge­ment de cURL ressemble à celle de wget, la populaire interface de commande. cURL n’est toutefois pas spé­cia­lisé dans les té­lé­char­ge­ments, mais plutôt dans la com­mu­ni­ca­tion générale au sein des réseaux. cURL dispose donc de fonc­tion­na­li­tés sup­plé­men­taires.

Tester si un serveur est ac­ces­sible avec cURL

Avec cURL, vous pouvez tester si un serveur est ac­ces­sible. Dans ce cadre, le fonc­tion­ne­ment de cURL ressemble à celui de la commande ping. cURL peut toutefois être utilisé de façon plus flexible en raison des pro­to­coles et des options dis­po­nibles. Par ailleurs, Ping est utilisé au niveau de la couche internet alors que cURL opère au niveau de la couche ap­pli­ca­tion. Cela signifie que Ping teste si la machine est connectée au réseau. La commande cURL suivante vérifie si et comment un serveur réagit :

# Tester si un serveur Web est accessible
server="google.com"
curl -I "$server"

Si des in­for­ma­tions de statut vous sont affichées après l’exécution du code, le serveur est ac­ces­sible.

Obtenir un en-tête avec cURL

En dehors du document à pro­pre­ment parler, toute requête HTTP implique l’échange de dif­fé­rentes mé­ta­don­nées. Ces in­for­ma­tions appelées en-tête HTTP décrivent aussi bien le document que le statut de la requête HTTP. Vous avez cer­tai­ne­ment déjà été confronté à une erreur 404 Not Found. Il s’agit d’une mé­ta­don­née indiquant que le document demandé n’a pas été trouvé.

Jetez un œil à l’en-tête de l’URL « google.com ». Pour ce faire, utilisez cURL avec l’option « --head » :

# Obtenir l’en-tête
url="google.com"
curl --head "$url"

« 301 Moved Per­ma­nently » doit notamment vous être affiché. Il s’agit du code de statut HTTP indiquant une re­di­rec­tion per­ma­nente. Ce que vous observez, c’est la re­di­rec­tion de [google.com] (sans « www ») vers [www.google.com].

Conseil

À la place de l’option « --head », vous pouvez utiliser l’écriture équi­va­lente « -I » (i majuscule). En guise de moyen mné­mo­tech­nique, vous pouvez retenir que cette option permet de consulter les Infor­ma­tions d’une URL plutôt que son contenu à pro­pre­ment parler.

Analyser des chaînes de re­di­rec­tion avec cURL

Les re­di­rec­tions HTTP (anglais : « redirects ») peuvent être activées en série. Dans ce cadre, on utilise le terme de « Redirect Chain » (ou « chaîne de re­di­rec­tion »). Imaginez-vous un site internet dont la page d’accueil serait [https://www.example.com/]. Si l’on appelle ce site avec [http://example.com], les re­di­rec­tions suivantes peuvent en résulter :

  • [http://example.com] → [https://example.com]
  • [https://example.com] → [https://www.example.com]
  • [https://www.example.com] → [https://www.example.com/]

Les chaînes de re­di­rec­tion en­traî­nent des délais de char­ge­ment inu­ti­le­ment longs et doivent être évitées. Mal­heu­reu­se­ment, il s’agit d’un problème difficile à analyser. Lors du char­ge­ment du site dans le na­vi­ga­teur, les re­di­rec­tions se pro­dui­sent sans que l’uti­li­sa­teur en ait vé­ri­ta­ble­ment cons­cience. cURL peut vous aider dans un tel cas grâce à l’option « --location » qui demande à cURL de suivre les re­di­rec­tions jusqu’à la dernière. Puisque le contenu des pages ne nous intéresse pas, nous utilisons ici l’option « --head ».

# Vérifier les redirections
url="google.com"
curl --location --head  "$url"
Conseil

Au lieu de l’option « -- location », vous pouvez utiliser l’écriture équi­va­lente « -L » (L majuscule).

Trans­fé­rer des données au serveur avec cURL

cURL vous permet non seulement de consulter des données mais aussi d’envoyer des données à un serveur ce qui se révèle très pratique si vous souhaitez au­to­ma­ti­ser le rem­plis­sage d’un for­mu­laire en ligne. cURL supporte également GET en plus de la méthode de requête par POST.

L’envoi des données étant plus complexe que la con­sul­ta­tion, nous pouvons uni­que­ment vous présenter un exemple ap­proxi­ma­tif. Pour des in­for­ma­tions plus dé­tail­lées, utilisez les ins­truc­tions d’Eve­ry­thing curl.

# Transmettre des données à un serveur
url="example.com"
# Saisissez les données sous forme de paire clé/valeur séparée par une « & »
données="prenom=Paul&nom=Dupont&age=42"
# Cet appel cURL transmet les données via POST
curl --data "$donnees" "$url"
# Vous pouvez demander à curl de transférer les données via GET
curl --data "$donnees" "$url" --get

Lire des cookies avec cURL

Les cookies HTTP sont de petits fichiers texte en­re­gis­trés lo­ca­le­ment sur votre appareil lors de la visite de la plupart des sites internet. Vous pouvez voir les cookies d’un site internet visité et les supprimer dans le na­vi­ga­teur. Cependant, cette procédure est gé­né­ra­le­ment trop lourde à des fins de test. cURL et l’option « --cookie-jar » (« cookie jar », en français « boîte de cookies ») per­met­tent un accès plus direct aux cookies.

# Lire les cookies
url="www.google.com"
cookies="cookies.txt"
curl --head --cookie-jar "$cookies" "$url"
# Afficher les cookies avec la commande cat
cat "$cookies"
Conseil

Grâce à l’option « --cookie », vous pouvez demander à cURL d’envoyer des cookies.

Options générales

Parmi les options cURL dis­po­nibles, certaines peuvent être combinées avec celles pré­sen­tées pré­cé­dem­ment.

Afficher des in­for­ma­tions sup­plé­men­taires

Dans certains cas, les in­for­ma­tions affichées lors de l’exécution d’une commande cURL ne suffisent pas. Dans ce cas, vous pouvez utiliser l’option « --verbose ». Une commande cURL dotée de cette option fournit une plus grande quantité d’in­for­ma­tions.

# Afficher des informations supplémentaires
url="www.google.com"
curl --verbose -I "$url"

Saisir le nom d’uti­li­sa­teur et un mot de passe avec cURL

Certaines URL sont protégées contre les accès non autorisés grâce à une au­then­ti­fi­ca­tion HTTP. Qu’en est-il si vous souhaitez accéder à une URL de ce type avec cURL ? Si vous n’indiquez pas le nom d’uti­li­sa­teur et le mot de passe, une erreur HTTP 401 vous sera affichée. Dans ce cas, utilisez la structure suivante :

# Saisir le nom d’utilisateur et un mot de passe avec curl
# URL protégée par un mot de passe 
url="www.example.com/secure/"
# Nom d’utilisateur
utilisateur=""
# Mot de passe
mot de passe=""
curl --user "${utilisateur}:${mot de passe}" "$url"
Conseil

Vous pouvez également utiliser cURL pour consulter des données d’un serveur FTP. Pour ce faire, utilisez également l’option --user pour indiquer le nom d’uti­li­sa­teur et le mot de passe.

Utiliser un Proxy avec cURL

Un proxy est un serveur in­ter­mé­diaire dont l’uti­li­sa­tion peut s’avérer utile pour dif­fé­rentes raisons. L’uti­li­sa­tion d’un proxy permet par exemple de mieux répondre à certaines exigences en matière de sécurité et de per­for­mance.

Si vous vous connectez à Internet via un proxy, vous devez en informer cURL. Pour cela, utilisez l’option « --proxy » :

# Utiliser un proxy avec cURL
url="www.google.com"
proxy="proxy.example.com"
port="8080"
curl --proxy "${proxy}:${port}" "$url"
Note

Si vous devez indiquer un nom d’uti­li­sa­teur et un mot de passe pour le serveur proxy, ajoutez l’option « --proxy-user ». Dans ce cas, saisissez le nom d’uti­li­sa­teur et le mot de passe en suivant le format « uti­li­sa­teur:mot de passe ».

Aller au menu principal