cURL sous Windows 10 : comment bien débuter ?

L’abréviation cURL signifie « Client for URLs » ou « Curl URL Request Library ». Il s’agit d’un programme d’invite de commande dotée d’une bibliothèque associée permettant de transmettre des données entre des ordinateurs connectés ensemble. Le logiciel cURL a été codé par le programmeur Daniel Stenberg. Son objectif premier était de mettre à disposition des participants d’un chat des données sur les taux de change actuels consultés par différents sites Internet. Du fait de sa licence MIT ouverte, cURL peut être utilisé librement et a été intégré dans de nombreux systèmes d’exploitation. C’est également le cas de Windows 10 qui dispose de cURL depuis avril 2018 avec la mise à jour 1803. Le guide complet Everything curl offre un aperçu des possibilités offertes aux développeurs grâce à cet outil. Vous découvrirez ci-dessous de quoi est capable cURL pour Windows à travers des exemples pratiques. Vous pourrez même appliquer certains d’entre eux immédiatement.

cURL pour Windows : de quoi s’agit-il exactement ?

Comme dans d’autres systèmes d’exploitation, cURL pour Windows se compose du fichier exécutable curl.exe et de la bibliothèque libcurl, une API codée dans le langage de programmation C qui met en œuvre les nombreuses possibilités de cURL. Les commandes sont exécutées à l’aide de l’invite de commandes de Windows et suivent une structure fixe :

C:\Users\Utilisateurtype>curl [options …] <url>

Dans cette commande, <url> est l’adresse du site Internet avec lequel on souhaite interagir. Les [options …] permettent de spécifier les instructions de façon à pouvoir exécuter des processus tels que des consultations de page, des chargements et des téléchargements, des publications, l’utilisation de formulaires et bien d’autres choses encore. Pour de nombreuses options, il existe deux variantes de formulation :

  • la première avec un signe moins suivi d’une lettre 
  • la seconde avec deux signes moins suivis de la commande

L’option « -G » et l’option « --get » permettent toutes les deux d’utiliser la méthode GET.

Vérifier la disponibilité et la version de cURL

Vérifiez tout d’abord si votre version de Windows dispose de cURL et si tel est le cas, de quelle version il s’agit. Pour ce faire, activez l’invite de commandes en saisissant « cmd » dans la recherche Windows. En saisissant au curseur

C:\Users\Utilisateurtype>curl --version

vous obtenez des informations sur la version de cURL disponible dans votre version de Windows 10.

Au gré du développement de cURL, le nombre de protocoles utilisables n’a cessé de croître. C’est ce que l’on constate en comparant les deux versions consultées au préalable :

7.55.1 (août 2017) 7.70.0 (avril 2020)
dict dict
file file
ftp ftp
ftps ftps
gopher
http http
https https
imap imap
imaps imaps
ldap
ldaps
mqtt
pop3 pop3
pop3s pop3s
rtsp
scp
sftp
smb
smbs
smtp smtp
smtps smtps
telnet telnet
tftp tftp

Les possibilités de transfert de données dans les différents réseaux s’en trouvent également étendues.

Installer la version actuelle de cURL

La version de cURL installée avec Windows est indiquée dans le système sous forme de chemin d’accès auquel l’utilisateur actuel et l’administrateur peuvent accéder. Si vous souhaitez utiliser tous les protocoles de cURL disponibles, la version actuelle de cURL pour Windows doit être installée. La méthode la plus simple consiste à télécharger la version actuellement disponible sous forme de fichier ZIP depuis le site Internet du développeur. Vous y trouverez également des informations concernant les modifications apportées (journal des modifications). Dans l’explorateur, décompressez le fichier vers un répertoire (par ex. « curl »). Créez un répertoire du même nom sur votre disque dur système, par ex. C:\curl\. Copiez-y tous les fichiers et répertoires provenant du dossier de téléchargement de cURL. Le fichier exécutable curl.exe est situé dans le sous-répertoire \bin dans lequel vous trouverez également le fichier de certificat curl-ca-bundle.crt. Vous aurez notamment besoin de ce dernier pour utiliser le protocole SFTP ou HTTPS.

Lancez ensuite l’invite de commandes Windows et saisissez :

# aller 2 niveaux de répertoire au-dessus
C:\Users\Utilisateurtype>cd..
C:\Users>cd..
# passer au répertoire indiqué
C:\cd curl\bin
C:\curl\bin>

À la position de saisie, vous disposez à présent de toute la palette de fonctionnalités de cURL pour Windows qui est utilisée ici pour d’autres affichages. Pour procéder au test, vérifiez simplement la version de la façon décrite ci-dessus. La méthode de mise à jour de cURL décrite ici fonctionne pour Windows 7, 8 et 10. Vous pouvez également intégrer la version actuelle de cURL dans le système ; pour cela, vous devez créer un chemin d’accès système ainsi que trouver le chemin d’accès vers les anciennes versions (!) et le désactiver.

cURL en pratique, à travers des exemples simples

L’utilisation de cURL pour Windows s’effectue en saisissant des commandes textuelles dans l’invite de commandes. Pour un aperçu rapide, utilisez la commande :

C:\curl\bin>curl --help

L’affichage détaillé du manuel est accessible avec :

C:\curl\bin>curl --manual

Pour enregistrer les deux versions apparaissant dans l’invite de commandes, il suffit de les copier-coller sous forme de fichier txt dans un dossier séparé. De cette façon, vous pouvez accéder facilement aux commandes avec la recherche dans le document tout en gardant l’invite de commandes disponible.

Conseil

Utilisez un éditeur de texte dans Windows. Vous pouvez y noter les commandes pour cURL, les vérifier puis les copier dans l’invite de commandes. Si une erreur se glisse dans la commande, vous vous épargnerez ainsi de la frustration et n’aurez pas à réitérer votre saisie. Par ailleurs, vous pouvez enregistrer vos propres « thématiques de commandes » par exemple avec vos données d’accès pour de futures actions.

Cette étape peut être réalisée encore plus rapidement grâce à

C:\curl\bin >curl --help | clip

La commande CMD « clip » avec un « | » antéposé copie immédiatement la version actuelle de l’invite de commandes dans la mémoire tampon de Windows de façon à pouvoir coller le contenu dans un document vide avec [Ctrl] + [V] et à l’y enregistrer.

Enregistrer localement des informations sur un site Internet

Il est possible d’enregistrer des informations sur un site Internet dans un fichier local à l’aide d’une routine cURL simple. Le fichier avec les informations doit également contenir le nom de fichier infos.html et être enregistré dans le même répertoire que l’installation de cURL sur le PC local. Sous Windows, cURL utilise à cet effet l’option « -o » (o minuscule et non un zéro).

curl -o infos.html https://www.20minutes.fr/

Cette requête génère un fichier de plus de 700 kilooctets avec l’état exact du site Internet 20minutes.fr au moment de la requête.

Si vous consultez ce fichier dans un navigateur depuis le support de données local, le site Internet vous sera affiché à l’état dans lequel il a été enregistré.

Cela fonctionne également avec les fichiers individuels d’un serveur Web. Le fichier ref.pdf doit par ailleurs être renommé en références.pdf après le téléchargement :

curl -o références.pdf https://mapage.tld/ref.pdf
ou
curl --output références.pdf https://mapage.tld/ref.pdf

Afficher l’en-tête d’un site Internet

Pour lire le contenu d’un en-tête de site Internet – compris entre les balises HTML <head>…</head> –, nous utilisons une option avant l’adresse Web à appeler (I = i majuscule) :

curl --head https://google.com
#ou
curl -I https://google.com

Lire des informations détaillées

Pour lire encore plus d’informations avec cURL, il est possible de compléter la saisie avec l’option supplémentaire « -v » ou « --verbose ». De cette façon, vous obtenez notamment des informations sur l’adresse Ipv6 utilisée, le port, les certificats établis et bien d’autres choses encore.

curl -I https://google.com -v
#ou
curl --head https://google.com --verbose

Chargement de données via le protocole SFTP

La commande cURL devient ici un peu plus complexe, car des identifiants utilisateur doivent être transférés au serveur pour SFTP afin de procéder à la connexion et à la vérification. Ce que nous réalisons à présent :

curl -k sftp://serveur-ftp-type:22 --user Utilisateurtype:motdepassetype-T fichiertype.pdf

Dans la fenêtre de l’invite de commandes Windows, vous pouvez suivre le déroulement du chargement. Le fichier chargé devrait à présent se trouver dans le répertoire racine de votre serveur FTP. Si vous faites une erreur dans la saisie, cURL pour Windows réagit rapidement avec le message « curl: (67) Authentication failure ». Si vous essayez ce transfert avec l’ancienne version de cURL 7.55.1 mentionnée plus haut, le message suivant apparaît : « curl: (1) Protocol "sftp" not supported or disabled in libcurl ».

Téléchargement via le protocole SFTP et cURL

Avec la version actuelle de cURL, le téléchargement fonctionne de façon tout aussi simple sans client FTP spécifique, sous réserve naturellement que le fichier pour le téléchargement existe sur le serveur FTP :

curl -k sftp://serveur-ftp-type:22 --user Utilisateurtype:motdepassetype-o fichiertype.pdf
Note

cURL est devenu un outil puissant. Procédez avec prudence lorsque vous cURLez votre propre environnement de serveur. Réaliser une sauvegarde de vos données et utiliser un support de restauration de Windows vous permet de vous assurer en cas de problème.

cURLer le bulletin météo

L’appel du bulletin de météo local montre que les caractères ASCII permettent de préparer les informations de façon plus attrayante (et plus pratique) :

curl http://wttr.in/LOCATION

La même opération peut être réalisée avec n’importe quel lieu.

cURL et PHP – un duo efficace

Afin de permettre l’utilisation de cURL dans la programmation quotidienne, cURL est également disponible en PHP. Vérifiez votre serveur Web avec la requête PHP :

<?php
phpinfo();
?>

Enregistrez ce code sous forme de fichier phpinfo.php et placez-le dans le répertoire racine de votre serveur Web. En consultant ce fichier dans le navigateur avec "https://mapage.tld/phpinfo.php", vous obtenez toutes les informations sur les options disponibles dans votre version de PHP, ainsi que la disponibilité de cURL.

Pour consulter un site Internet avec des informations supplémentaires, il suffit de quelques lignes de code PHP. Nous prenons ici comme exemple le site français de Microsoft :

<?php
$site = curl_init(); //initialiser le gestionnaire de cURL
curl_setopt($site, CURLOPT_URL, "https://www.microsoft.com/fr-fr/"); //indiquer l’URL
curl_setopt($site,CURLOPT_RETURNTRANSFER,true); // définir les paramètres optionnels
curl_setopt($site,CURLOPT_HEADER, true); //Afficher l’en-tête; supprimer avec « false »
$result=curl_exec($site); //exécuter le cURL à proprement parler
curl_close($site);
echo $result;
?>

Enregistrez par exemple ce code sous forme de curlinfo.php dans le répertoire racine de votre serveur Web.

Comme seul le code PHP se trouve dans le fichier, les informations de l’en-tête sont indiquées sous une forme non formatée dans la police du navigateur. Une routine de ce type constitue la base pour intégrer des données de sites Internet dans votre propre présence Web avec PHP et cURL.

PowerShell vs. invite de commandes

Sous Windows 10, un autre outil de développement puissant a été implémenté : PowerShell. Cette suite logicielle est reconnaissable aux lettres « PS » avant le chemin d’accès Windows après avoir cliqué droit sur le symbole Windows. Windows PowerShell est appelé à remplacer l’invite de commandes mise à disposition sous le terme « Console » et offre des possibilités plus vastes pour administrer les sites Internet et les serveurs. Cependant, seule une partie des commandes cURL est utilisable dans PowerShell. D’autres commandes doivent être « traduites ».

Le « traducteur » est intégré par défaut et est activé dans PowerShell avec « GetAlias » suivi de la commande cURL.

PS C:\WINDOWS\system32> Get-Alias curl
# génère la saisie
CommandType	Name	Version	Source
-----------	----	-------	------
Alias	curl -> Invoke-WebRequest

Cette commande permet de savoir avec quelle commande PowerShell un site Internet peut être cURLé :

PS C:\WINDOWS\system32> Invoke-WebRequest https://google.com/