cURL est un progiciel composé d'un outil de ligne de commande et d'une bibliothèque pour transférer des données à l'aide de la syntaxe URL.
cURL prend en charge divers protocoles tels que DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet et TFTP.
Cet article fournit 15 exemples pratiques d'utilisation de cURL.
1. Télécharger un seul fichier
La commande suivante obtiendra le contenu de l'URL et l'affichera dans le STDOUT (c'est-à-dire sur votre terminal).
$ curl http://www.centos.org
Pour stocker la sortie dans un fichier, vous pouvez la rediriger comme indiqué ci-dessous. Cela affichera également des statistiques de téléchargement supplémentaires.
$ curl http://www.centos.org > centos-org.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 27329 0 27329 0 0 104k 0 --:--:-- --:--:-- --:--:-- 167k
2. Enregistrez la sortie cURL dans un fichier
Nous pouvons enregistrer le résultat de la commande curl dans un fichier en utilisant les options -o/-O.
- -o (o minuscule) le résultat sera enregistré dans le nom de fichier fourni dans la ligne de commande
- -O (O majuscule) le nom de fichier dans l'URL sera pris et il sera utilisé comme nom de fichier pour stocker le résultat
$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
Maintenant, la page gettext.html sera enregistrée dans le fichier nommé "mygettext.html". Vous pouvez également noter que lors de l'exécution de curl avec l'option -o, il affiche la barre de progression du téléchargement comme suit.
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987
Lorsque vous utilisez curl -O (O majuscule), il enregistre le contenu dans le fichier nommé "gettext.html" lui-même sur la machine locale.
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
Remarque :Lorsque curl doit écrire les données sur le terminal, il désactive le Progress Meter, pour éviter toute confusion lors de l'impression. Nous pouvons utiliser les options ‘>’|’-o’|’-O’ pour déplacer le résultat dans un fichier.
Semblable à cURL, vous pouvez également utiliser wget pour télécharger des fichiers. Reportez-vous aux exemples de wget pour comprendre comment utiliser wget efficacement.
3. Récupérer plusieurs fichiers à la fois
Nous pouvons télécharger plusieurs fichiers en une seule fois en spécifiant les URL sur la ligne de commande.
Syntaxe :
$ curl -O URL1 -O URL2
La commande ci-dessous téléchargera à la fois index.html et gettext.html et les enregistrera sous le même nom dans le répertoire actuel.
$ curl -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html
Veuillez noter que lorsque nous téléchargeons plusieurs fichiers à partir d'un même serveur, comme indiqué ci-dessus, curl essaiera de réutiliser la connexion.
4. Suivez les en-têtes de localisation HTTP avec l'option -L
Par défaut, CURL ne suit pas les en-têtes HTTP Location. Il est également appelé redirections. Lorsqu'une page Web demandée est déplacée vers un autre endroit, un en-tête HTTP Location sera envoyé en tant que réponse et indiquera l'emplacement de la page Web réelle.
Par exemple, lorsque quelqu'un tape google.com dans le navigateur depuis l'Inde, il sera automatiquement redirigé vers "google.co.in". Cela se fait en fonction de l'en-tête HTTP Location, comme indiqué ci-dessous.
$ curl http://www.google.com <TITLE>302 Moved</TITLE> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.co.in/">here</A>
La sortie ci-dessus indique que le document demandé est déplacé vers "http://www.google.co.in/".
Nous pouvons insister pour que curl suive la redirection en utilisant l'option -L, comme indiqué ci-dessous. Maintenant, il va télécharger le code source html de google.co.in.
$ curl -L http://www.google.com
5. Continuer/Reprendre un téléchargement précédent
En utilisant l'option curl -C, vous pouvez continuer un téléchargement qui a déjà été arrêté pour une raison quelconque. Cela sera utile lorsque vous téléchargez des fichiers volumineux et que le téléchargement a été interrompu.
Si nous disons '-C -', alors curl trouvera à partir de là où commencer à reprendre le téléchargement. Nous pouvons également donner un décalage ‘-C
Lancez un gros téléchargement à l'aide de curl et appuyez sur Ctrl-C pour l'arrêter entre les téléchargements.
$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20.1%
Remarque :-# est utilisé pour afficher une barre de progression au lieu d'un indicateur de progression.
Maintenant, le téléchargement ci-dessus a été arrêté à 20,1 %. En utilisant "curl -C -", nous pouvons continuer le téléchargement là où il s'est arrêté plus tôt. Maintenant, le téléchargement continue à partir de 20,1 %.
curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ############### 21.1%
6. Limiter le taux de transfert de données
Vous pouvez limiter le montant auquel les données sont transférées à l'aide de l'option –limit-rate. Vous pouvez spécifier le taux de transfert maximum comme argument.
$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html
La commande ci-dessus limite le transfert de données à 1000 octets/seconde. curl peut utiliser un taux de transfert plus élevé pendant une courte période. Mais en moyenne, il atteindra 1 000 B/seconde.
Ce qui suit était le compteur de progression pour la commande ci-dessus. Vous pouvez voir que la vitesse actuelle est proche des 1000 octets.
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999
7. Télécharger un fichier uniquement s'il a été modifié avant/après l'heure indiquée
Nous pouvons obtenir les fichiers modifiés après un certain temps en utilisant l'option -z dans curl. Cela fonctionnera à la fois pour FTP et HTTP.
$ curl -z 21-Dec-11 http://www.example.com/yy.html
La commande ci-dessus téléchargera le fichier yy.html uniquement s'il est modifié après la date et l'heure indiquées
$ curl -z -21-Dec-11 http://www.example.com/yy.html
La commande ci-dessus téléchargera le fichier yy.html, s'il est modifié avant la date et l'heure indiquées.
Veuillez vous référer à 'man curl_getdate' pour les différentes syntaxes prises en charge pour l'expression de date
8. Passer l'authentification HTTP dans cURL
Parfois, les sites Web nécessitent un nom d'utilisateur et un mot de passe pour afficher le contenu (peut être fait avec le fichier .htaccess). Avec l'aide de l'option -u, nous pouvons transmettre ces informations d'identification de cURL au serveur Web, comme indiqué ci-dessous.
$ curl -u username:password URL
Remarque :Par défaut, curl utilise l'authentification HTTP de base. Nous pouvons spécifier une autre méthode d'authentification en utilisant –ntlm | –digérer.
9. Télécharger des fichiers à partir du serveur FTP
cURL peut également être utilisé pour télécharger des fichiers à partir de serveurs FTP. Si le chemin FTP donné est un répertoire, par défaut, il listera les fichiers sous le répertoire spécifique.
$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php
La commande ci-dessus téléchargera le fichier xss.php depuis le serveur ftp et l'enregistrera dans le répertoire local.
$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
Ici, l'URL donnée fait référence à un répertoire. Ainsi, cURL listera tous les fichiers et répertoires sous l'URL donnée
Si vous débutez avec FTP/sFTP, consultez le didacticiel ftp sftp pour les débutants.
10. Lister/Télécharger à l'aide de plages
cURL prend en charge les plages à donner dans l'URL. Lorsqu'une plage est donnée, les fichiers correspondant à la plage seront téléchargés. Il sera utile de télécharger des packages à partir des sites miroirs FTP.
$ curl ftp://ftp.uk.debian.org/debian/pool/main/[a-z]/
La commande ci-dessus répertoriera tous les packages des plages de a à z dans le terminal.
11. Télécharger des fichiers sur le serveur FTP
Curl peut également être utilisé pour télécharger des fichiers sur le serveur FTP avec l'option -T.
$ curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com
La commande ci-dessus téléchargera le fichier nommé myfile.txt sur le serveur FTP. Vous pouvez également télécharger plusieurs fichiers en même temps à l'aide des opérations de plage.
$ curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com
En option, nous pouvons utiliser "." pour obtenir l'entrée de STDIN et la transférer vers la télécommande.
$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt
La commande ci-dessus obtiendra l'entrée de l'utilisateur à partir de l'entrée standard et enregistrera le contenu sur le serveur ftp sous le nom "myfile_1.txt".
Vous pouvez fournir un "-T" pour chaque URL et la paire spécifie quoi télécharger et où.
12. Plus d'informations à l'aide de l'option Verbose et Trace
Vous pouvez savoir ce qui se passe en utilisant l'option -v. -v option active le mode verbeux et il imprimera les détails
curl -v http://google.co.in
La commande about affichera ce qui suit
* About to connect() to www.google.co.in port 80 (#0) * Trying 74.125.236.56... connected * Connected to www.google.co.in (74.125.236.56) port 80 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.21.0 (i486-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 > Host: www.google.co.in > Accept: */* > * HTTP 1.0, assume close after body < HTTP/1.0 200 OK < Date: Tue, 10 Apr 2012 11:18:39 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=ISO-8859-1 < Set-Cookie: PREF=ID=7c497a6b15cc092d:FF=0:TM=1334056719:LM=1334056719:S=UORpBwxFmTRkbXLj; expires=Thu, 10-Apr-2014 11:18:39 GMT; path=/; domain=.google.co.in . .
Si vous avez besoin d'informations plus détaillées, vous pouvez utiliser l'option –trace. L'option de trace activera un vidage de trace complet de toutes les données entrantes/sortantes vers le fichier donné
=> Send header, 169 bytes (0xa9) 0000: 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a GET / HTTP/1.1.. 0010: 55 73 65 72 2d 41 67 65 6e 74 3a 20 63 75 72 6c User-Agent: curl .. 0060: 2e 32 2e 33 2e 34 20 6c 69 62 69 64 6e 2f 31 2e .2.3.4 libidn/1.
0070: 31 35 20 6c 69 62 73 73 68 32 2f 31 2e 32 2e 36 15 libssh2/1.2.6 0080: 0d 0a 48 6f 73 74 3a 20 77 77 77 2e 67 6f 6f 67 ..Host: www.goog 0090: 6c 65 2e 63 6f 2e 69 6e 0d 0a 41 63 63 65 70 74 le.co.in..Accept 00a0: 3a 20 2a 2f 2a 0d 0a 0d 0a : */*.... == Info: HTTP 1.0, assume close after body <= Recv header, 17 bytes (0x11) 0000: 48 54 54 50 2f 31 2e 30 20 32 30 30 20 4f 4b 0d HTTP/1.0 200 OK. 0010: 0a
Cette option détaillée et trace sera utile lorsque curl échoue pour une raison quelconque et nous ne savons pas pourquoi.
13. Obtenir la définition d'un mot à l'aide du protocole DICT
Vous pouvez utiliser cURL pour obtenir la définition d'un mot à l'aide du protocole DICT. Nous devons lui transmettre une URL de serveur de dictionnaire.
$ curl dict://dict.org/d:bash
La commande ci-dessus listera la signification de bash comme suit
151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48" Bash \Bash\, v. t. [imp. & p. p. {Bashed}; p. pr. & vb. n. {Bashing}.] [Perh. of imitative origin; or cf. Dan. baske to strike, bask a blow, Sw. basa to beat, bas a beating.] To strike heavily; to beat; to crush. [Prov. Eng. & Scot.] --Hall Caine. [1913 Webster] Bash her open with a rock. --Kipling. [Webster 1913 Suppl.] . 151 "Bash" gcide "The Collaborative International Dictionary of English v.0.48" Bash \Bash\, n. 1. a forceful blow, especially one that does damage to its target. [PJC] . .
Vous pouvez maintenant voir qu'il utilise "The Collaborative International Dictionary of English". De nombreux dictionnaires sont disponibles. Nous pouvons lister tous les dictionnaires utilisant
$ curl dict://dict.org/show:db jargon "The Jargon File (version 4.4.7, 29 Dec 2003)" foldoc "The Free On-line Dictionary of Computing (26 July 2010)" easton "Easton's 1897 Bible Dictionary" hitchcock "Hitchcock's Bible Names Dictionary (late 1800's)" bouvier "Bouvier's Law Dictionary, Revised 6th Ed (1856)"
Maintenant, afin de trouver la signification réelle de Bash dans l'ordinateur, nous pouvons rechercher bash dans le dictionnaire "foldoc" comme suit
$ curl dict://dict.org/d:bash:foldoc
Le résultat sera,
bash Bourne Again SHell. {GNU}'s {command interpreter} for {Unix}. Bash is a {Posix}-compatible {shell} with full {Bourne shell} syntax, and some {C shell} commands built in. The Bourne Again Shell supports {Emacs}-style command-line editing, job control, functions, and on-line help. Written by Brian Fox of {UCSB}.
Pour plus de détails concernant DICT, veuillez lire RFC2229
14. Utiliser un proxy pour télécharger un fichier
Nous pouvons spécifier cURL pour utiliser un proxy pour effectuer l'opération spécifique à l'aide de l'option -x. Nous devons spécifier l'hôte et le port du proxy.
$ curl -x proxysever.test.com:3128 http://google.co.in
15. Envoyer un e-mail à l'aide du protocole SMTP
cURL peut également être utilisé pour envoyer du courrier en utilisant le protocole SMTP. Vous devez spécifier l'adresse de départ, l'adresse de destination et l'adresse IP du serveur de messagerie comme indiqué ci-dessous.
$ curl --mail-from [email protected] --mail-rcpt [email protected] smtp://mailserver.com
Une fois la commande ci-dessus entrée, il attendra que l'utilisateur fournisse les données au courrier. Une fois que vous avez composé votre message, tapez . (point) comme dernière ligne, qui enverra l'e-mail immédiatement.
Subject: Testing This is a test mail .