[cURL] 15 commandes pratiques avec cURL

curl

cURL est un outil gratuit en ligne de commande qui permet de télécharger et d’envoyer des données sur divers protocoles: DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet et TFTP.

cURL est léger et disponible sur presque toutes les plateformes: Mac, Windows et Linux.

Il est fréquemment utilisé dans des scripts sous Linux ou pour télécharger du contenu via l’extension cURL de php.

cURL est probablement le logiciel que j’utilise le plus souvent car il me permet de faire du diagnostique, du flooding, du benchmark, de la maintenance, du téléchargement, …

Ainsi lorsque je développe des applications Web, il me permet de vérifier l’efficacité de mon code en envoyant des centaines de requêtes HTTP par secondes, ou bien il me sert d’aspirateur de sites, ou bien encore il me permet de faire des opérations de maintenance comme la sauvegarde de dossiers puis l’envoie sur un FTP de backup.

cURL est vraiment ultra puissant, en plus d’être rapide et performant, il supporte les authentifications sécurisées.

Ce tutoriel pourra vous servir de mémo sur l’utilisation de cURL et il sert de complément à mon premier article sur cURL.

Télécharger un fichier avec cURL

Pour télécharger un fichier ou une page web et afficher son contenu dans la console, il suffit de taper:

curl http://www.zem.fr

Il est également possible de sauvegarder le résultat du téléchargement dans un fichier:

curl http://www.zem.fr > zem.html

Cette commande vous affichera également des statistiques sur le téléchargement effectué:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 25319    0 25319    0     0   224k      0 --:--:-- --:--:-- --:--:--  257k

Veuillez noter que si vous affichez le résultat directement dans la console, vous n’aurez pas les statistiques de téléchargement, évitant ainsi de polluer le résultat.

Sauvegarder le résultat de cURL dans un fichier

Il est possible de sauvegarder le document téléchargé dans un fichier sur votre disque dur grâce aux options suivantes:

  • -o: le résultat sera sauvé dans le fichier passé en paramètre
  • -O: le résultat sera sauvé dans un fichier portant le même nom que le fichier téléchargé
curl -o index.html http://www.zem.fr/index.html

Télécharger plusieurs fichiers en même temps avec cURL

cURL permet également de télécharger plusieurs fichiers dans une seule ligne de commande:

curl -O http://www.zem.fr/index.html -O http://www.zem.fr/about.html

Afin de limiter les ressources utilisées par votre ordinateur, cURL réutilisera la même connexion pour télécharger les fichiers d’un même serveur.

Suivre les headers HTTP Location avec cURL

Par défaut, cURL ne suit pas les redirections HTTP signalées dans les headers HTTP. Ces redirections HTTP peuvent arrivées lorsqu’une page est déplacée et que vous recevez un code 302.

Ainsi un francophone qui interrogera google.com sera automatiquement redirigé vers google.fr:

curl http://www.google.com
 
<TITLE>302 Moved</TITLE>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.fr/">here</A>

Si vous souhaitez que cURL suive la redirection, il vous suffira de préciser l’option -L. cURL suivra alors la redirection et téléchargera le contenu de la page finale:

curl -L http://www.google.com

Continuer et reprendre un téléchargement avec cURL

Si vous avez arrêté un téléchargement avant qu’il ne soit achevé, il est possible de le reprendre là où vous en étiez grâce à l’option -C, ce qui peut être pratique lorsque l’on télécharge des fichiers volumineux (iso de debian par exemple):

Tout d’abord lancer le téléchargement:

curl -O http://www.debian.org/latest.iso
##############             22.3%

Pour arrêter un téléchargement en cours, il suffit de faire Ctrl+C.

Pour reprendre le téléchargement, il suffit de lancer la commande avec l’option -C -:

curl -C - -O http://www.debian.org/latest.iso
###############            22.6%

Restreindre le taux de transfert utilisé par cURL

Par défaut, cURL téléchargera les fichiers le plus rapidement possible. Dans certains cas, il est préférable de limiter la bande passante utilisée par cURL afin de laissée votre connexion disponible pour d’autres applications.

Pour limiter le taux de transfert utilisé par cURL, il faut utiliser l’option –limit-rate suivie du taux de transfert maximum utilisable par cURL:

curl --limit-rate 10MB -O http://www.zem.fr/index.html

Dans cet exemple, cURL téléchargera au maximum à 10 Mega bytes par secondes.

Télécharger un fichier avec cURL uniquement s’il a été modifié

Il peut être intéressant de télécharger un fichier uniquement si sa date de modification est supérieure à une date de référence (dans le cas d’une sauvegarde automatique par exemple).
Pour télécharger un fichier avec cURL uniquement s’il a été modifié, il faut utiliser l’option -z:

Dans l’exemple suivant, cURL ne téléchargera le fichier que s’il a été modifié après la date passée en paramètre:

curl -z 12-Jan-13 http://www.zem.fr/index.html

Dans l’exemple suivant, cURL ne téléchargera le fichier que s’il a été modifié avant la date passée en paramètre:

curl -z -12-Jan-13 http://www.zem.fr/index.html

Télécharger un fichier protégé par htaccess avec cURL

Il est possible de télécharger un fichier protégé par une authentification de type htaccess avec cURL grâce à l’option -u:

curl -u login:password http://url.com/fichierprotege.html

Télécharger des fichiers d’un serveur FTP avec cURL

Les commandes précédentes sont utilisées pour télécharger des fichiers Web mais cURL permet également de télécharger des fichiers disponibles sur un serveur FTP.

La commande suivante télécharge un fichier présent sur un serveur FTP:

curl -u ftpuser:ftppass -O ftp://ftp_server/fichier.html

Dans la commande suivante, cURL va télécharger tout le contenu d’un répertoire:

curl -u ftpuser:ftppass -O ftp://ftp_server/dossier/

Uploader des fichiers sur un serveur FTP avec cURL

L’option -T permet de spécifier qu’on souhaite uploader un document:

curl -u ftpuser:ftppass -T fichier.html ftp://ftp_server/

La commande suivante permet d’uploader plusieurs fichiers:

curl -u ftpuser:ftppass -T "{fichier1,fichier2}" ftp://ftp_server/

Utiliser les ranges avec cURL

cURL supporte les ranges (regex), ce qui peut être pratique pour certains téléchargements:

curl ftp://ftp.uk.debian.org/debian/pool/main/[a-z]/

Avoir plus d’informations et de traces avec cURL

L’option -v vous permet d’avoir plus d’informations (cookies, header, ip, …) concernant le téléchargement:

curl -v http://google.com

Ce qui retourne:

* About to connect() to www.google.com port 80 (#0)
*   Trying 75.213.6.56... connected
* Connected to www.google.com (75.213.6.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.com
> 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=7c497gdfqzezr92d...

L’option -trace vous donnera un dump complet des requêtes effectuées:

curl -trace http://google.com

Obtenir la définition d’un mot avec cURL

Petite fantaisie: il est possible d’obtenir la définition d’un mot avec cURL en utilisant le protocole DICT:

curl dict://dict.org/d:bash

Ce qui retournera:

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.]
...

Utiliser un proxy avec cURL

Si vous souhaitez téléchargé un fichier avec cURL en utilisant un proxy, il suffit d’utiliser l’option -x:

curl -x proxyserver.fr:3128 http://www.zem.fr

Envoyer un email avec cURL

cURL supporte également le protocole SMTP ce qui vous permet d’envoyer des emails (il supporte aussi le protocole POP3 qui permet de télécharger des emails).

curl --mail-from from@email.com --mail-rcpt to@email.com smtp://serveursmtp.com

Il ne vous reste plus qu’à saisir le message à envoyer 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *