Introduction
Curl (abréviation de client URL request library ou bibliothèque de requêtes aux URL pour les clients ) est un outil en ligne de commande permettant d’envoyer ou de télécharger des ressources accessibles par le réseau. Curl est disponible sur Linux, MAC et Windows et peut servir aussi d’outil de diagnostic. En plus, Curl supporte une large variété des protocoles réseau comme HTTP, HTTPS, FTP, FTPS, SFTP etc…, la valeur par défaut étant HTTP.
Curl offre plusieurs fonctionnalités à savoir : Le support de proxy, l’authentification, la connection en SSL, les cookies…
Installation de la commande curl
Si curl n’existe pas sur votre machine, vous pouvez l’installer comme suit :
sudo yum install curl
Exemples d’utilisation de la commande curl
1- Afficher la version de curl et ses protocols supportés
L’option -V permet d’afficher plusieurs informations utiles comme la version, protocoles supportés et les fonctionnalités de la commande curl installée.
[[email protected] ~]# curl -V curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.36 zlib/1.2.7 libidn/1.28 libssh2/1.4.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps telnet tftp Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz unix-sockets
2- Télécharger un fichier en gardant son nom d’origine
L’option -O permet de dire à curl de garder le nom d’origine du fichier téléchargé.
[[email protected] ~]# curl -O http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8226 100 8226 0 0 44174 0 --:--:-- --:--:-- --:--:-- 44225 [[email protected] ~]# ls sitedetout.png
3- Télécharger plusieurs fichiers
[[email protected] ~]# curl -O http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png -O http://www.sitedetout.com/wp-content/uploads/2019/10/ruby-300x180.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8226 100 8226 0 0 99k 0 --:--:-- --:--:-- --:--:-- 100k 100 6049 100 6049 0 0 47345 0 --:--:-- --:--:-- --:--:-- 47345 [[email protected] ~]# ls ruby-300x180.png sitedetout.png
4- Afficher la barre de progression du tééchargement
[[email protected] ~]# curl -# -O http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png ######################################################################## 100,0%
5- Récupérer les entêtes http d’une url
[[email protected] ~]# curl -I http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png HTTP/1.1 200 OK Date: Sun, 27 Oct 2019 21:50:28 GMT Server: Apache Last-Modified: Sat, 28 Jul 2018 13:03:46 GMT Accept-Ranges: bytes Content-Length: 8226 Cache-Control: max-age=2592000, public Expires: Mon, 26 Oct 2020 21:50:28 GMT Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET Access-Control-Allow-Headers: Content-Type, Authorization Vary: User-Agent Content-Type: image/png
Cependant, vous pouvez avoir parfois un message de type 301 comme le cas de google.fr
[[email protected] ~]# curl -I http://google.fr HTTP/1.1 301 Moved Permanently Location: http://www.google.fr/ Content-Type: text/html; charset=UTF-8 Date: Sun, 27 Oct 2019 21:52:09 GMT Expires: Tue, 26 Nov 2019 21:52:09 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 218 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN
En effet, google redirige une requête http vers une requête https. Dans ce cas on peut dire à curl de suivre la redirection grâce à l’option -L.
[[email protected] ~]# curl -I -L http://google.fr HTTP/1.1 301 Moved Permanently Location: http://www.google.fr/ Content-Type: text/html; charset=UTF-8 Date: Sun, 27 Oct 2019 21:52:18 GMT Expires: Tue, 26 Nov 2019 21:52:18 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 218 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN HTTP/1.1 200 OK Date: Sun, 27 Oct 2019 21:52:18 GMT Expires: -1 Cache-Control: private, max-age=0 Content-Type: text/html; charset=ISO-8859-1 P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info." Server: gws X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Set-Cookie: 1P_JAR=2019-10-27-21; expires=Tue, 26-Nov-2019 21:52:18 GMT; path=/; domain=.google.fr; SameSite=none Set-Cookie: NID=190=J_LUSy_BW_jXlhLaxDESAxR0-0R9I5HIGq5TbooujFboMsJr_gNxugMIy_RYyNNsCaZXteQRSMUVUqTie2o1oXHc1lWvvrq5eiUo4fTK3ybFZBBJ9b9vCBWM_fAB72LTQAQ34YsFjkTkpeugkMbtQXCkqmpzZDC72FrPLEOabAQ; expires=Mon, 27-Apr-2020 21:52:18 GMT; path=/; domain=.google.fr; HttpOnly Transfer-Encoding: chunked Accept-Ranges: none Vary: Accept-Encoding
6- Limiter le débit maximum de transfert
L’option –limit-rate permet de fixer le taux de transfert maximum. En effet, remarquez la différence du temps d’exécution des deux requêtes suivantes.
[[email protected] ~]# curl --limit-rate 1k -O http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8226 100 8226 0 0 1001 0 0:00:08 0:00:08 --:--:-- 1169
[[email protected] ~]# curl --limit-rate 3k -O http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8226 100 8226 0 0 4289 0 0:00:01 0:00:01 --:--:-- 4288
7- Télécharger un fichier depuis un serveur FTP avec ou sans authentification
Pour télécharger un fichier avec authentification, vous pouvez utiliser l’option -u :
curl -u user:password ftp://speedtest.tele2.net/5MB.zip
[[email protected] ~]# curl -O ftp://speedtest.tele2.net/5MB.zip % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 5120k 100 5120k 0 0 1541k 0 0:00:03 0:00:03 --:--:-- 1541k [[email protected] ~]# ls 5MB.zip
8- Envoyer un fichier vers un serveur ftp avec ou sans authentification
Pour envoyer un fichier vers un serveur ftp, on utilisera l’option -T.
curl -T Fichier_A_Envoyer -u user:password ftp://speedtest.tele2.net
9- Relancer un téléchargement interrompu
Si vous avez commencer un téléchargement et que ce dernier a été interrompu pour une raison quelconque, vous pouvez le relancer avec l’option -C. Dans l’exemple suivant, j’ai interrompu moi même le téléchargement avec un crtl+c.
[[email protected] ~]# curl --limit-rate 1k -O http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 44 8226 44 3685 0 0 1325 0 0:00:06 0:00:02 0:00:04 1325^C [[email protected] ~]# curl -C - --limit-rate 1k -O http://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8226 100 8226 0 0 981 0 0:00:08 0:00:08 --:--:-- 1090
10- Gestion des certificats SSL avec curl
Si vous essayer de récupérer une ressource en SSL depuis https://www.sitedetout.com, alors vous aurez l’erreur suivante.
[[email protected] ~]# curl -O https://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 curl: (60) Peer's Certificate has expired. More details here: http://curl.haxx.se/docs/sslcerts.html curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.
Dans ce cas, vous pouvez utiliser l’option -k pour dire à curl de ne pas vérifier le certificat ssl.
[[email protected] ~]# curl -O -k https://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8226 100 8226 0 0 13354 0 --:--:-- --:--:-- --:--:-- 13375
11- Envoyer des paramètre POST dans la requête curl
Afin d’envoyer des paramètre POST dans une commande curl, vous pouvez utiliser l’option -X et spécifier des données grâce à l’option –data.
[[email protected] ~]# curl -O -k -X POST --data "data1:valeur1,data2:valeur2" https://sitedetout.com/wp-content/uploads/2016/02/sitedetout.png % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 8253 100 8226 100 27 24422 80 --:--:-- --:--:-- --:--:-- 24482
12- Récupérer et réutiliser un coockie de session avec curl
Supposons que vous ayez un formulaire d’authentification avec un utilisateur et un mot de passe dont les attributs name sont username et password et ayant une action nommé formaction. on peut utiliser curl pour s’y authentifier et récupérer le cookie de session généré.
curl -i -c cookieFile --data 'username=user&password=password' https://host:port/application/formaction
Le cookie est alors enregistré dans le fichier cookieFile. On peut l’utiliser dans les prochaines requêtes comme suit :
curl -b cookieFile http://host:port/application/protected/protected.jsp
Conclusion
Vous voilà prêts à utiliser la commande curl dans vos tâches quotidiennes. N’oubliez pas de partager cet article et voir les autres articles Linux.