La commande Curl

curl est un utilitaire de ligne de commande permettant de transférer des données depuis ou vers un serveur conçu pour fonctionner sans interaction de l’utilisateur. 

Avec curl, vous pouvez télécharger ou télécharger des données à l’aide de l’un des protocoles pris en charge, notamment :

  • HTTP et HTTPS
  • FTP et FTPS
  • IMAP et IMAPS
  • POP3 et POP3S
  • SMB et SMBS
  • SFTP
  • SCP
  • TELNET
  • GOPHER
  • LDAP et LDAPS
  • SMTP et SMTPS

 

Tout d’abord, vérifions quelle version de cURL est disponible avec la commande suivante :

curl --version

Le résultat affichera la version de cURL et une liste des protocoles pris en charge. Nous pouvons maintenant voir quelques exemples de commandes cURL. 

Syntaxe basique de la commande cURL

Apprenons à utiliser les commandes de cURL. La syntaxe de base de cURL ressemble à ceci :

curl [OPTIONS] [URL]

L’utilisation la plus simple de cURL est d’afficher le contenu d’une page. L’exemple ci-dessous permet d’afficher la page d’accueil du site domainetest.com.

curl domainetest.com

Cela permet d’obtenir le code source complet de la page d’accueil du domaine. Si aucun protocole n’est spécifié, cURL l’interprétera en HTTP. 

Options de la commande cURL pour les fichiers

Les commandes cURL permettent de télécharger des fichiers à distance. Vous pouvez le faire de deux manières différentes :

  • -O permet de télécharger un fichier et l’enregistrer dans le dossier de travail actuel avec le même nom de fichier.
  • -o vous permet de spécifier un nom de fichier ou un emplacement différent

Voici un exemple de ce type d’action :

curl -O http://domainetest.com/fichiertest.tar.gz

La commande ci-dessus va enregistrer le fichier sous le nom fichiertest.tar.gz.

curl -o nouveaufichiertest.tar.gz http://domainetest.com/fichiertest.tar.gz

La commande ci-dessus va enregistrer le fichier sous le nom nouveaufichiertest.tar.gz.Si, pour une raison quelconque, le téléchargement est interrompu, vous pouvez le reprendre en utilisant cURL. Vous pouvez le faire avec la commande suivante :

curl -C - -O  http://domainetest.com/fichiertest.tar.gz

En utilisant cURL, nous pouvons également télécharger plusieurs fichiers, comme indiqué ci-dessous :

curl -O http://domainetest.com/fichiertest.tar.gz -O http://mondomaine.com/monfichier.tar.gz

Si vous souhaitez télécharger plusieurs fichiers à partir de plusieurs URL, listez-les tous dans un fichier. La commande cURL peut être combinée avec xargs pour télécharger les différentes URL.Par exemple, si nous avons un fichier toutesUrls.txt qui contient une liste de toutes les URL à télécharger, alors l’exemple ci-dessous peut être utilisé pour télécharger tous les fichiers.

xargs –n 1 curl -O < toutesUrls.txt

Commande cURL pour http

cURL peut également être utilisé lorsqu’il existe un serveur proxy. Si vous êtes derrière un serveur proxy qui utilise le port 8090 sur exempledeproxy.com, téléchargez les fichiers comme indiqué ci-dessous :

curl -x  exempledeproxy.com:8090 -U nomutilisateur:motdepasse -O http://domainetest.com/fichiertest.tar.gz

Dans l’exemple ci-dessus, vous pouvez éviter le paramètre -U nomutilisateur:motdepasse si le proxy ne nécessite pas de méthode d’authentification.Une requête HTTP typique contient toujours un en-tête. L’en-tête HTTP envoie des informations supplémentaires sur le serveur web distant avec la requête actuelle. Bien que les outils de développement d’un navigateur vous permettent de vérifier les informations de l’en-tête, vous pouvez les vérifier à l’aide d’une commande cURL.Vous trouverez ci-dessous un exemple de la manière de récupérer les informations d’en-tête d’un site internet.

curl -I www.domainetest.com

En utilisant cURL, vous pouvez lancer une requête GET et POST. Une requête GET se présente comme suit :

curl http://domainetest.com

Un exemple avec une requête POST est présenté ci-dessous :

curl –data “texte=Bonjour” https://mondomaine.com/premierePage.jsp

Ici texte=Bonjour est le paramètre de requête POST. Cette méthode est similaire à celle utilisée pour les formulaires HTML.Vous pouvez également spécifier plusieurs méthodes HTTP en une seule commande curl. Pour ce faire, utilisez l’option -next, comme ceci :

curl –data “texte=Bonjour” https://mondomaine.com/premierePage.jsp --next https://mondomaine.com/afficherResultat.jsp

Ceci contient une requête POST suivie d’une requête GET.Chaque requête HTTP aura un agent utilisateur qui est envoyé dans le cadre de la requête. Cela indique les détails du navigateur web du client. Par défaut, une requête cURL contient cURL et le numéro de version comme détails de l’agent utilisateur. Un exemple de résultat est présenté ci-dessous :

“GET / HTTP/1.1” 200 “_” ”curl/7/29/0”

Vous pouvez modifier ces informations d’agent utilisateur par défaut en utilisant la commande ci-dessous :

curl -I http://mondomaine.com –-user-agent “Mon nouveau navigateur”

Maintenant, le résultat modifié sera :

“GET / HTTP/1.1” 200 “_” “Mon nouveau navigateur”

cURL pour les cookies d’un site internet

La commande cURL peut être utilisée pour vérifier quels cookies sont téléchargés sur n’importe quelle URL. Ainsi, si vous accédez à https://www.sitewebexemple.com, vous pouvez créer un fichier, enregistrer les cookies et les consulter à l’aide de cat ou d’un éditeur VIM.Vous trouverez ci-dessous un exemple de commande de ce type :

curl --cookie-jar Mescookies.txt https://www.sitewebexemple.com/index.html -O

De même, si vous avez les cookies dans un fichier, vous pouvez l’envoyer au site web. Un exemple de cette commande est présenté ci-dessous :

curl --cookie Mescookies.txt https://www.sitewebexemple.com

cURL pour FTP

La commande cURL supporte le FTP ! Vous pouvez l’utiliser pour télécharger des fichiers à partir d’un serveur distant.

curl -u nomutilisateur:motdepasse -O ftp://exempleserveurftp/fichiertest.tar.gz

Dans la commande ci-dessus, ftp://exempleserveurftp est un serveur FTP qui accepte les connexions. Le nom d’utilisateur et le mot de passe peuvent être ignorés pour les connexions FTP anonymes. Tapez la commande et regardez la barre de progression se remplir.Vous pouvez également télécharger des fichiers avec la commande ci-dessous :

curl -u nomutilisateur:motdepasse -T fichiertest.tar.gz ftp://exempleserveurftp

Là aussi, nous pouvons ignorer le nom d’utilisateur et le mot de passe pour les connexions FTP anonymes.

Limiter les résultats de cURL

En utilisant cURL, vous ne pouvez pas savoir quelle sera la taille du résultat. Vous pouvez restreindre la bande passante, afin de vous assurer qu’elle n’est pas saturée par cURL.La commande ci-dessous limite la bande passante à 100K :

curl --limit-rate 100K http://domainetest.com/fichiertest.tar.gz -O

Quelques options prises en charge par cURL

OptionExplication
‑‑ciphersSpécifie les chifferements à utiliser dans la connexion. La liste des chifferements doit être valide.
‑‑connect‑timeoutTemps maximum en secondes que vous permettez à la connexion au serveur de prendre.
–cookie ou -bEnvoie un cookie dans la requête, par exemple, -b « name=value » ou –cookie « name=value ».
–header ou -HAjoute un en-tête personnalisé à la requête, par exemple, -H « Content-Type : application/json » ou –header « Content-Type : application/json ».
–user ou -uEnvoie un nom d’utilisateur et un mot de passe pour l’authentification de base, par exemple, -u « username:password » ou –user « username:password ».
-I ou –headEnvoie uniquement les en-têtes de la réponse, pas le corps.
-L ou –locationSuit les redirections.
–output ou -oSpécifie un fichier dans lequel enregistrer la réponse, par exemple, -o response.txt ou –output response.txt.
–silent ou -sRéduit au silence la sortie de la commande, ne montrant que les erreurs.
–show-error ou -SAffiche les erreurs mais pas la sortie normale.

Quelques Exemples 


Télécharger un fichier : On utilise l’option -o pour spécifier le nom du fichier, on peut tout à fait spécifier un chemin complet.

curl –o monfichier.iso https://www.mavisiondigitale.com/telecharger/fichier.iso
curl -O https://www.mavisiondigitale.com/telecharger/fichier.iso

Télécharger des fichiers à partir d’un fichier list : La commande xargs permet de parser un fichier contenant une liste d’URL pour télécharger chaque fichier avec curl.

Voici la syntaxe à utiliser :

 xargs -n 1 curl -O < /tmp/liste-url.txt

On peut aussi le faire avec la boucle for comme ceci :

for url in `cat /tmp/liste-url.txt`; do curl $url ; done

Reprendre un téléchargement interrompu : L’utilisation de -C indique à curl de reprendre le téléchargement en commençant là où il s’était arrêté.

curl –c –o monfichier.iso https://www.mavisiondigitale.com/telecharger/fichier.iso

Limiter la vitesse de téléchargement : L’option –limit-rate vous permet de limiter le taux de transfert de données

Dans l’exemple suivant, curl téléchargera le binaire Go et limitera la vitesse de téléchargement à 1 Mo:

curl --limit-rate 1m -O https://www.mavisiondigitale.com/superiso.iso

Effectuer une requête HTTP GET : Il suffit d’utiliser la commande sans aucune option spécifique comme ceci :

curl https://www.mavisiondigitale.com

Obtenir l’en-tête d’une URL :Par défaut, les en-têtes de réponse sont masqués dans la sortie de curl. Pour les montrer, utilisez l’option -i:

curl -i https://www.mavisiondigitale.com

Pour afficher seulement l’en-tête :

curl -I https://www.mavisiondigitale.com

Inspecter tous les détails de la demande et de la réponse : Pour obtenir la réponse complète du serveur WEB avec son en-tête, utilisez l’option –verbose :

curl --verbose -I https://www.mavisiondigitale.com

Suivre les redirections : Par défaut, lorque curl contacte un serveur WEB qui retourne un code 3XX ou un en-tête Location:, il ne suit pas ce dernier.

Pour forcer à suivre les redirections, vous devez utiliser l’option -L :

curl -L https://www.mavisiondigitale.com

Faire un POST : L’option X vous permet de modifier la méthode HTTP utilisée. Par défaut, GET est utilisé, et c’est la même chose que l’écriture :

url -X GET https://www.mavisiondigitale.com

Vous pouvez effectuer une requête POST en passant des données URL encodées avec le paramètre -d.

Saisissez ensuite les données à envoyer via la méthode POST.

curl -d "option=valeur&champs=autrevaleur" -X POST https://www.mavisiondigitale.com

Effectuer une requête HTTP POST en envoyant JSON : Au lieu de publier des données encodées en URL, comme dans l’exemple ci-dessus, vous souhaiterez peut-être envoyer du JSON.Dans ce cas, vous devez définir explicitement l’en-tête Content-Type, en utilisant l’option -H :

curl -d '{"option": "value", "queqluechose": "autrevaleur"}' -H "Content-Type: application/json" -X POST https://www.mavisiondigitale.com/

Vous pouvez également envoyer un fichier JSON depuis votre disque:

curl -d "@my-file.json" -X POST https://www.mavisiondigitale.com/

Pour en savoir +

man curl

Nous espérons que ce tutoriel vous a donné un bon point de départ pour utiliser cURL !