Dans ce tutoriel, nous présenterons la commande cURL sous Linux. Nous donnerons quelques exemples pour vous guider à travers les fonctions de ce puissant utilitaire et vous aider à comprendre toutes les fonctions qu'il peut atteindre.
La commande cURL est utilisée pour télécharger ou télécharger des données sur le serveur en utilisant l'un de ses plus de 20 protocoles pris en charge. Ces données peuvent être un fichier, un e-mail ou une page Web.
Annuaire
-
Qu'est-ce que la commande cURL?
-
Téléchargez le fichier
-
Suivez la redirection
-
Arrêtez et continuez le téléchargement
-
Spécifiez le délai
-
Utilisez un nom d'utilisateur et un mot de passe
-
Utiliser un proxy
-
Télécharger de gros fichiers en morceaux
-
Certificat client
-
Boucle silencieuse
-
Obtenez le titre
-
En-têtes multiples
-
Publier (télécharger) des fichiers
-
Envoyer un e-mail
-
Lire l'e-mail
-
Différence entre cURL et wget
Qu'est-ce que la commande cURL?
cURL est un outil idéal pour interagir avec des sites Web ou des API, envoyer des demandes aux terminaux et afficher des réponses ou enregistrer des données dans des fichiers. Parfois, il est utilisé dans le cadre d'un script plus large pour transmettre les données récupérées à d'autres fonctions pour traitement.
Étant donné que cURL peut être utilisé pour récupérer des fichiers à partir du serveur, il est généralement utilisé pour télécharger une partie d'un site Web. Il peut bien remplir cette fonction, mais parfois la commande wget convient mieux à ce travail.
Plus loin dans cet article, nous présenterons certaines similitudes et différences entre wget et cURL.
Nous vous montrerons comment commencer à utiliser cURL dans la section suivante.
Téléchargez le fichier
La commande la plus élémentaire que nous pouvons donner à cURL est de télécharger un site Web ou un fichier. Sauf si nous spécifions un protocole différent, cURL utilisera HTTP comme protocole par défaut. Pour télécharger le site Web, exécutez simplement la commande suivante:
$ curl http://www.google.com
Bien sûr, veuillez entrer n'importe quel site Web ou page à récupérer.
L'exécution de commandes de base comme celle-ci sans autres options est rarement utile, car elle indique uniquement à cURL de récupérer le code source de la page que vous avez fournie.
Lorsque nous exécutons des commandes, notre terminal est plein de code HTML et d'autres scripts Web sous cette forme, il ne nous est pas particulièrement utile.
Téléchargeons le site Web en tant que document HTML afin que le contenu puisse être affiché et que l'option -output puisse être ajoutée pour implémenter cURL.
$ curl www.likegeeks.com --output likegeeks.html
Maintenant, le site Web que nous avons téléchargé peut être ouvert et affiché dans le navigateur.
Si vous souhaitez télécharger un fichier en ligne, les commandes sont à peu près les mêmes. Mais assurez-vous d'ajouter l'option -output à cURL, comme nous l'avons fait dans l'exemple ci-dessus.
Si vous ne le faites pas, cURL enverra la sortie binaire du fichier en ligne à votre terminal, ce qui pourrait entraîner un dysfonctionnement.
Voici à quoi cela ressemble lorsque nous commençons à télécharger un document Word de 500 Ko.
Le document Word commence à télécharger et la progression actuelle du téléchargement est affichée dans le terminal. Une fois le téléchargement terminé, le fichier sera disponible dans le répertoire où nous l'avons enregistré.
Dans cet exemple, le répertoire n'est pas spécifié, alors enregistrez-le dans le répertoire de travail actuel (le répertoire dans lequel la commande cURL est exécutée).
De plus, avez-vous remarqué l'option -L que nous avons spécifiée dans la commande cURL? Pour télécharger ce fichier, il est nécessaire, nous présenterons sa fonction dans la section suivante.
Suivez la redirection
Si la sortie est vide lorsque vous essayez de générer une URL pour un site Web, cela peut signifier que le site Web indique à cURL de rediriger vers une autre URL. Par défaut, cURL ne suivra pas la redirection, mais vous pouvez utiliser le commutateur -L pour le dire.
$ curl -L www.likegeeks.com
Dans la recherche dans cet article, nous avons constaté qu'il est nécessaire de spécifier -L sur la plupart des sites Web, alors n'oubliez pas cette petite astuce. Par défaut, vous pouvez même vouloir l'associer à la plupart des commandes cURL.
Arrêtez et continuez le téléchargement
Si votre téléchargement est interrompu, ou si vous devez télécharger un fichier volumineux mais que vous ne souhaitez pas terminer toutes les opérations à la fois, cURL fournit une option pour continuer la transmission à partir de l'endroit où elle a été interrompue.
Pour arrêter la transmission manuellement, vous pouvez utiliser la combinaison de touches ctrl + c pour terminer le processus cURL, tout comme l'arrêt de presque tous les processus en cours d'exécution.
Notre téléchargement a commencé, mais a été interrompu par ctrl + c. Reprenons maintenant le téléchargement en utilisant la syntaxe suivante:
$ curl -C - example.com/some-file.zip --output MyFile.zip
-C switch est l'appareil qui restaure notre transfert de fichiers, mais notez également qu'il est suivi d'un tiret (-). Cela indique à cURL de continuer le transfert de fichiers, mais pour réaliser cette étape, nous devons d'abord vérifier la partie qui a été téléchargée et trouver le dernier octet du téléchargement pour déterminer où récupérer.
À ce moment, notre transfert de fichiers a repris et nous pouvons continuer à terminer le téléchargement.
Spécifiez le délai
Si vous souhaitez que cURL continue de fonctionner pendant un certain temps après que vous n'ayez pas effectué d'opération, vous pouvez spécifier un délai d'expiration dans la commande. Ceci est particulièrement utile car certaines opérations dans cURL n'ont pas de délai d'expiration par défaut, donc si vous ne souhaitez pas S'il se bloque indéfiniment, vous devez en spécifier un.
Vous pouvez utiliser l'option -m pour spécifier la durée maximale requise pour exécuter la commande. Après l'heure spécifiée, cURL quittera l'opération qu'il effectue, même s'il télécharge ou télécharge un fichier.
cURL spécifiera la durée maximale souhaitée en secondes. Par conséquent, pour expirer après une minute, la commande ressemblera à ceci:
$ curl -m 60 example.com
Un autre type de délai d'attente que vous pouvez spécifier avec cURL est le temps passé sur le lien. Cela permet de garantir que cURL ne passe pas trop de temps à essayer de se connecter à un hôte hors ligne ou inaccessible.
Il accepte également les secondes comme paramètre. Cette option est écrite sous la forme –connect-timeout.
$ curl --connect-timeout 60 example.com
Utilisez un nom d'utilisateur et un mot de passe
Vous pouvez utiliser l'option -u pour spécifier le nom d'utilisateur et le mot de passe dans la commande cURL. Par exemple, si vous souhaitez vous authentifier via un serveur FTP, la syntaxe est la suivante:
$ curl -u username:password ftp://example.com
Vous pouvez l'utiliser pour n'importe quel protocole, mais FTP est généralement utilisé pour de tels transferts de fichiers simples.
Si nous voulons télécharger le fichier montré dans la capture d'écran ci-dessus, nous avons juste besoin d'émettre la même commande en utilisant le chemin complet du fichier.
$ curl -u username:password ftp://example.com/readme.txt
Utiliser un proxy
Avant de vous connecter à l'hôte, il est facile d'utiliser directement cURL pour utiliser le proxy. cURL utilisera le proxy HTTP par défaut, sauf indication contraire.
Utilisez le commutateur -x pour définir le proxy. Puisque le protocole n'est pas spécifié dans cet exemple, cURL supposera qu'il s'agit d'un proxy HTTP.
$ curl -x 192.168.1.1:8080 http://example.com
Cette commande utilisera 192.168.1.1 sur le port 8080 comme proxy pour se connecter à example.com.
Vous pouvez également l'utiliser avec d'autres accords. Voici un exemple d'utilisation d'un proxy HTTP pour transférer UR cURLL vers un serveur FTP et récupérer des fichiers.
$ curl -x 192.168.1.1:8080 ftp://example.com/readme.txt
cURL prend en charge de nombreux autres types de proxys et options à utiliser avec ces proxys, mais une extension supplémentaire dépassera le cadre de ce guide. Veuillez vous référer à la page de manuel cURL pour plus d'informations sur le tunneling de proxy, le proxy SOCKS, l'authentification, etc.
Télécharger plusieurs fichiers en morceaux
Nous avons montré comment arrêter et reprendre le transfert de fichiers, mais que faire si nous voulons que cURL ne télécharge qu'une partie du fichier? De cette façon, nous pouvons télécharger plusieurs fichiers de blocage.
Si vous devez maintenir une limite de téléchargement ou une limite similaire, vous ne pouvez télécharger que certaines parties du fichier. L'indicateur –range est utilisé pour terminer cette opération.
La taille doit être en octets. Par conséquent, si nous voulons télécharger le dernier fichier Ubuntu .iso dans une taille de bloc de 100 Mo, la première commande ressemblera à ceci:
$ curl --range 0-99999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1
La deuxième commande devra extraire et télécharger un autre bloc de 100 Mo dans l'octet suivant.
$ curl --range 0-99999999 http://releases.ubuntu.com/
18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part1
$ curl --range 100000000-199999999 http://releases.ubuntu.com/18.04/ubuntu-18.04.3-desktop-amd64.iso ubuntu-part2
Répétez ce processus jusqu'à ce que tous les blocs aient été téléchargés. La dernière étape consiste à combiner ces blocs dans un fichier, ce qui peut être fait à l'aide de la commande cat.
$ cat ubuntu-part? > ubuntu-18.04.3-desktop-amd64.iso
Certificat client
Pour utiliser l'authentification par certificat au lieu de l'authentification de base pour accéder au serveur, vous pouvez utiliser l'option –cert pour spécifier le fichier de certificat.
$ curl --cert path/to/cert.crt:password ftp://example.com
cURL dispose de nombreuses options pour le format du fichier de certificat.
Il existe plus d'options liées aux certificats: –cacert, –cert-status, –cert-type, etc. Veuillez consulter la page de manuel pour une liste complète des options.
Boucle silencieuse
Si vous ne souhaitez pas afficher l'indicateur de progression et le message d'erreur de cURL, le commutateur -s peut fournir cette fonction. Il produira toujours les données que vous avez demandées, donc si vous voulez que la commande soit 100% silencieuse, vous devez diriger la sortie vers un fichier.
Utilisez cette commande avec l'indicateur -O pour enregistrer le fichier dans le répertoire de travail actuel. Cela garantira que cURL renvoie 0 sortie.
$ curl -s -O http://example.com
Vous pouvez également utiliser l'option –output pour choisir un emplacement pour enregistrer le fichier et spécifier un nom.
$ curl -s http://example.com --output index.html
Obtenez le titre
L'utilisation de cURL pour obtenir le titre de l'adresse distante est très simple, il vous suffit d'utiliser l'option -I.
$ curl -I example.com
Si vous utilisez cette option conjointement avec l'option –L, cURL renverra les en-têtes pour chaque adresse vers laquelle il redirige.
$ curl -I -L example.com
Plusieurs titres
Vous pouvez utiliser l'option -H pour passer l'en-tête à cURL. Pour passer plusieurs en-têtes, il vous suffit d'utiliser plusieurs fois l'option -H. Voici un exemple:
$ curl -H 'Connection: keep-alive' -H 'Accept-Charset: utf-8 ' http://example.com
Publier (télécharger) des fichiers
Le POST est un moyen courant pour les sites Web d'accepter des données. Par exemple, lorsque vous remplissez un formulaire en ligne, il est probable qu'il utilise la méthode POST pour envoyer des données à partir du navigateur. Pour envoyer des données au site Web de cette manière, utilisez l'option -d.
$ curl -d 'name=geek&location=usa' http://example.com
Pour télécharger un fichier au lieu de texte, la syntaxe doit être la suivante:
$ curl -d @filename http://example.com
Utilisez plusieurs indicateurs -d selon les besoins pour spécifier toutes les différentes données ou noms de fichiers à télécharger.
Si vous souhaitez télécharger le fichier sur un serveur FTP, vous pouvez utiliser l'option -T.
$ curl -T myfile.txt ftp://example.com/some/directory/
Envoyer un e-mail
L'envoi d'un e-mail télécharge simplement les données de votre ordinateur (ou d'un autre appareil) vers le serveur de messagerie. Puisque cURL peut télécharger des données, nous pouvons les utiliser pour envoyer des e-mails. Il existe de nombreuses options, mais voici un exemple de la façon d'envoyer un e-mail via un serveur SMTP:
$ curl smtp://mail.example.com --mail-from [email protected] --mail-rcpt [email protected] –upload-file email.txt
Votre fichier e-mail doit être formaté correctement. Comme ça:
$ cat email.txt
From: Web Administrator <[email protected]>
To: John Doe <[email protected]>
Subject: An example email
Date: Sat, 7 Dec 2019 02:10:15
John,
Hope you have a great weekend.
-Admin
Comme d'habitude, des options plus détaillées et professionnelles peuvent être trouvées dans la page de manuel de cURL.
Lire l'e-mail
cURL prend en charge IMAP (et IMAPS) et POP3, qui peuvent tous deux être utilisés pour récupérer des e-mails à partir du serveur de messagerie.
Connectez-vous en utilisant IMAP comme ceci:
$ curl -u username:password imap://mail.example.com
Cette commande répertorie les boîtes aux lettres disponibles, mais n'affiche aucun message spécifique. Pour ce faire, utilisez l'option –X pour spécifier l'UID du message.
$ curl -u username:password imap://mail.example.com -X 'UID FETCH 1234'
Différence entre cURL et wget
Parfois, les gens confondent cURL et wget car ils peuvent tous deux récupérer des données sur le serveur. Mais c'est la seule chose qu'ils ont en commun.
Dans cet article, nous montrons la fonction de cURL. wget fournit un ensemble différent de fonctions. wget est le meilleur outil pour télécharger des sites Web et peut parcourir récursivement des répertoires et des liens pour télécharger des sites Web entiers.
Pour télécharger le site Web, utilisez wget. Si vous utilisez un protocole autre que HTTP ou HTTPS ou l'utilisez pour télécharger des fichiers, veuillez utiliser cURL. cURL est également un bon choix pour télécharger des fichiers individuels à partir du Web, mais wget fait également un excellent travail.