cURL sous Linux : ce qu’il faut savoir pour débuter

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’ordinateurs. Le nom cURL renvoie à « client URL ». La licence ouverte accorde un droit d’utilisation à 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 composantes. libcurl, la bibliothèque du programme, est l’épine dorsale du transfert de données et supporte les protocoles 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éveloppement Web car il permet aux développeurs de communiquer directement avec les serveurs plutôt que de devoir passer par un navigateur. Les scripts basés sur les commandes cURL (également appelées « cURL commands » en anglais) sont utilisés pour automatiser les processus ainsi que pour procéder à des tests et au débogage.

Comment fonctionne cURL ?

Les deux composantes de cURL fonctionnent différemment.

Comment libcurl est-il utilisé ?

La bibliothèque du programme libcurl met à disposition des fonctionnalités permettant d’envoyer des données dans des réseaux d’ordinateurs. Il existe des « bindings de langage » (que l’on peut traduire par « liaisons de langage ») pour des douzaines de langages de programmation populaires. Ces bindings permettent à un grand nombre de logiciels communiquant avec des serveurs d’utiliser les fonctionnalités de libcurl.

Comment cURL est-il utilisé ?

Le programme d’invite de commande cURL est utilisé dans le développement Web. La méthode la plus simple consiste à saisir les commandes cURL dans l’invite de commande. Avec le savoir-faire correspondant, vous pourrez ainsi tester et déboguer des serveurs et des API.

Plutôt que de saisir manuellement les commandes dans l’interface de commande, vous pouvez également les regrouper dans des scripts. Ceci permet de standardiser et d’automatiser des opérations laborieuses, qu’il s’agisse du chargement/du téléchargement de données, du remplissage automatique de formulaires ou de la mise en miroir de sites internet entiers.

La structure d’une commande cURL se présente généralement 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éfinissent le fonctionnement de l’appel cURL.

Exemples pratiques de commande cURL sous Linux

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

  1. d’un ordinateur avec un système d’exploitation 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 uniquement un éditeur de code/éditeur de texte brut. Vous ne devez en aucun cas utiliser des logiciels de traitement de texte comme Word, OpenOffice ou LibreOffice 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 commençant par « curl » suivi d’un numéro de version. Si cURL n’est pas installé, veuillez suivre les instructions d’« Everything 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 utilisation 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 puissantes. Une commande mal saisie peut potentiellement paralyser l’intégralité de votre système. Par conséquent, n’exécutez jamais des commandes copiées directement 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 intermédiaire vous oblige à faire une courte pause pendant laquelle vous pouvez vérifier chaque commande et la modifier si nécessaire avant de l’exécuter.

Télécharger des fichiers avec cURL

Consulter des données avec cURL depuis le serveur

En principe, vous pouvez appeler pratiquement 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é directement dans l’interface de commande sans formatage. Un navigateur est toutefois nécessaire pour afficher correctement le code source. Le plus simple est généralement d’enregistrer le fichier localement.

Conseil

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

Consulter un fichier avec cURL et l’enregistrer localement

Téléchargeons 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 enregistre localement 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 personnellement 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"

Poursuivre le téléchargement avec cURL en cas d’interruption

Cette situation irritante vous est peut-être familière : alors que vous téléchargiez un programme volumineux depuis plusieurs heures, le téléchargement s’interrompt soudainement vous obligeant à recommencer 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

Normalement, 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écessaire, vous pouvez également interrompre manuellement un téléchargement lancé avec cURL. Ceci peut notamment s’avérer utile pour les gros fichiers lorsque vous devez quitter votre domicile et emporter votre ordinateur portable.

Conseil

Vous pouvez interrompre un appel cURL en cours. Pour cela, appuyez sur Ctrl+C, à plusieurs reprises si nécessaire.

Communiquer avec le serveur via cURL

La fonctionnalité de téléchargement de cURL ressemble à celle de wget, la populaire interface de commande. cURL n’est toutefois pas spécialisé dans les téléchargements, mais plutôt dans la communication générale au sein des réseaux. cURL dispose donc de fonctionnalités supplémentaires.

Tester si un serveur est accessible avec cURL

Avec cURL, vous pouvez tester si un serveur est accessible. Dans ce cadre, le fonctionnement de cURL ressemble à celui de la commande ping. cURL peut toutefois être utilisé de façon plus flexible en raison des protocoles et des options disponibles. Par ailleurs, Ping est utilisé au niveau de la couche internet alors que cURL opère au niveau de la couche application. 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 informations de statut vous sont affichées après l’exécution du code, le serveur est accessible.

Obtenir un en-tête avec cURL

En dehors du document à proprement parler, toute requête HTTP implique l’échange de différentes métadonnées. Ces informations appelées en-tête HTTP décrivent aussi bien le document que le statut de la requête HTTP. Vous avez certainement déjà été confronté à une erreur 404 Not Found. Il s’agit d’une métadonné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 Permanently » doit notamment vous être affiché. Il s’agit du code de statut HTTP indiquant une redirection permanente. Ce que vous observez, c’est la redirection de [google.com] (sans « www ») vers [www.google.com].

Conseil

À la place de l’option « --head », vous pouvez utiliser l’écriture équivalente « -I » (i majuscule). En guise de moyen mnémotechnique, vous pouvez retenir que cette option permet de consulter les Informations d’une URL plutôt que son contenu à proprement parler.

Analyser des chaînes de redirection avec cURL

Les redirections HTTP (anglais : « redirects ») peuvent être activées en série. Dans ce cadre, on utilise le terme de « Redirect Chain » (ou « chaîne de redirection »). 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 redirections 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 redirection entraînent des délais de chargement inutilement longs et doivent être évitées. Malheureusement, il s’agit d’un problème difficile à analyser. Lors du chargement du site dans le navigateur, les redirections se produisent sans que l’utilisateur en ait véritablement conscience. cURL peut vous aider dans un tel cas grâce à l’option « --location » qui demande à cURL de suivre les redirections 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 équivalente « -L » (L majuscule).

Transfé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 automatiser le remplissage d’un formulaire 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 consultation, nous pouvons uniquement vous présenter un exemple approximatif. Pour des informations plus détaillées, utilisez les instructions d’Everything 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 enregistrés localement 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 navigateur. Cependant, cette procédure est généralement trop lourde à des fins de test. cURL et l’option « --cookie-jar » (« cookie jar », en français « boîte de cookies ») permettent 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 disponibles, certaines peuvent être combinées avec celles présentées précédemment.

Afficher des informations supplémentaires

Dans certains cas, les informations 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’informations.

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

Saisir le nom d’utilisateur et un mot de passe avec cURL

Certaines URL sont protégées contre les accès non autorisés grâce à une authentification 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’utilisateur 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’utilisateur et le mot de passe.

Utiliser un Proxy avec cURL

Un proxy est un serveur intermédiaire dont l’utilisation peut s’avérer utile pour différentes raisons. L’utilisation d’un proxy permet par exemple de mieux répondre à certaines exigences en matière de sécurité et de performance.

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’utilisateur et un mot de passe pour le serveur proxy, ajoutez l’option « --proxy-user ». Dans ce cas, saisissez le nom d’utilisateur et le mot de passe en suivant le format « utilisateur:mot de passe ».