Linux France

S'abonner à flux Linux France
Mis à jour : il y a 1 heure 15 min

2018, curl a vingt ans

Jeudi 29 Mars

Curl est l'exemple du logiciel utilisé partout, tellement omniprésent que l'on oublie d'en parler. Aucune dépêche ou journal LinuxFr.org dédié à ce logiciel, alors même qu'un de ses homonymes le langage Curl a eu le droit d'être mentionné en 2001. Tandis que le vénérable curl fête ses vingt ans, il est temps de réparer cet honteux oubli.

Curl (curl ou plutôt cURL pour « client URL request library ») se rapporte en fait à la bibliothèque libcurl et à l'outil en ligne de commande curl, permettant de faire des requêtes sur un réseau (pléthore de protocoles sont pris en charge). Écrits en C, ils existent sur une multitude de systèmes différents, et la bibliothèque est utilisables depuis de nombreux (>40) langages (C++, Java, .NET, Perl, PHP, Ruby, etc.).

Sommaire Documentation et fonctionnalités

La documentation mentionne notamment :

  • les systèmes AIX, AmigaOS, Android, BeOS, BlackBerry Tablet OS, BlackBerry 10, OpenVMS, Darwin, DOS, FreeBSD, HP-UX, HURD, iOS, IRIX, Linux, macOS, NetBSD, NetWare, OpenBSD, OS/2, QNX Neutrino, RISC OS, Solaris, Symbian, Tru64, Ultrix, UnixWare, Windows (oui même Windows) et d'autres…
  • les protocoles DICT, FILE, FTP, FTPS, Gopher, HTTP dont HTTP/2, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet et TFTP
  • une utilisation dans les voitures, les télévisions, les routeurs, les imprimantes, les équipements audio, les téléphones mobiles, les tablettes, les lecteurs multimédia, etc. (et probablement des machines à café). Voir aussi la page des utilisations commerciales de curl
  • la bibliothèque est thread-safe, compatible IPv6, prend en charge de multiples bibliothèques de cryptographiques (axTLS, GnuTLS, mbed TLS, NSS, QSOSSL sur IBM i, SChannel sur Windows, Secure Transport sur macOS et iOS, SSL/TLS via OpenSSL, wolfSSL), etc. Voir l'entrée de blog sur la gestion de TLS 1.3.
Histoire

Le développeur principal est Daniel Stenberg (employé par Mozilla, grand, suédois, grognon, comme il se décrit sur son blog).

En 1997, HttpGet 1.0 est publié le 8 avril 1997. Mais rapidement l'HTTP n'est pas suffisant, la prise en charge de GOPHER est ajoutée, et urlget 2.0 est publié (après renommage donc). Le get c'est bien, mais le logiciel fait plus, alors curl 4.0 est publié le 20 mars 1998 (GPL). (voir la page histoire du projet).

(le logo de 1998, par Henrik Hellerstedt)

  • octobre 1998 : curl 4.9 (passage en licence MPL, 4000 lignes de code)
  • 1999 : curl 6.0 (15000 lignes)
  • 2000 : libcurl apparaît (2000 lignes)
  • 2001 : curl 7.5.2 (passage en licence MIT, 24000 lignes)
  • 2002: 35000 lignes
  • 2003: 45000 lignes
  • 2005: gnuTLS comme alternative possible à OpenSSL
  • etc.
  • 2017 : les chiffres du projet sont éloquents :

    • Versions publiées de curl : 169
    • Options en ligne de commande: 211
    • Options curl_easy_setopt(): 249
    • Fonctions publiques dans libcurl: 74
    • Contributeurs: 1609
  • 14 mars 2018 : dernière version publiée à ce jour, curl 7.59.0

Facteurs de croissance sur les 20 ans du projet :
  • Protocoles pris en charge : x7.67
  • Options en ligne de commande : x9
  • Lignes de code : x75
  • Contributeurs: x100
  • Visiteurs hebdo sur le site web : x1.400
  • Utilisateurs finaux du code: x4.000.000
  • Autocollants avec le logo curl: infinité

Sécurité

Comme déjà dit précédemment, de multiples bibliothèques cryptographiques sont prises en charge (et comparées). Mais c'est l'autre aspect de la sécurité (les failles et problèmes) que cette partie veut aborder. Un outil ayant autant de fonctionnalités que curl/libcurl connaît forcément des failles au cours de son existence. L'historique du projet le rappelle, et une page dédiée recense d'ailleurs les 78 failles précédemment découvertes (ainsi que les procédures en place).

Le récent exemple de transparence dont a fait preuve D. Stenberg est à la fois à saluer, et à la fois un indicateur de l'importance du sujet pour le projet, ce qui est plutôt rassurant.

Exemples d'utilisation

On trouve très facilement et très souvent des exemples d'utilisation de curl et des tutoriels d'utilisation. En voici quelques uns :

Un accès basique à LinuxFr.org

Un exemple bateau/trivial d'accès à un site web : TCP, puis TLS, puis HTTP, et hop une page web.

$ curl -v -s https://linuxfr.org (...) * Connected to linuxfr.org (88.191.250.176) port 443 (#0) (...) * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 (...) * SSL certificate verify ok. (...) > GET / HTTP/1.1^M > Host: linuxfr.org^M > User-Agent: curl/7.58.0^M > Accept: */*^M > ^M (...) < HTTP/1.1 200 OK^M < Server: nginx/1.2.1^M < Date: Thu, 29 Mar 2018 09:23:22 GMT^M < Content-Type: text/html; charset=utf-8^M (...) Curlception curl https://curl.haxx.se/download/curl-7.59.0.tar.xz|tar xvJf - && cd curl-7.59.0 && ./configure && make && make check

(ce qui a permis de remonter un bug sur les locales dû au séparateur décimal qui était une virgule au lieu du point attendu dans la barre de progression pour le résultat final de 100,00%)

Documentation d'Elastic (Elasticsearch, Logstash, Kibana, etc.)

Prenons cet extrait de la documentation du logiciel Elasticsearch expliquant comment modifier un document :

La requête est affichée pour les développeurs et peut-être copiée/collée en tant que commande curl (curl -XPUT 'localhost:9200/twitter/_doc/1?pretty' -H 'Content-Type: application/json' -d'{"user" : "kimchy", "post_date" : "2009-11-15T14:12:12", "message" : "trying out Elasticsearch"}')

Blog de S. Bortzmeyer

Des exemples variés d'utilisation, en français :

Installation de RVM

La procédure d'installation de RVM (Ruby Version Manager) utilise explicitement curl (reprise d'ailleurs dans la documentation d'installation du code de LinuxFr.org) :

\curl -sSL https://get.rvm.io | bash Parrot.live

Cette commande permet d'amener la paix dans le monde et de sauver les oisillons dodo.

curl parrot.live En vrac
  • attention aux mauvaises pratiques du type curl --insecure https://domainelouche.example.invalid/p0wn/service.csh|sudo tcsh
  • d'autres outils en ligne de commande dans la même catégorie : httpie, bat, wget, et le projet curl maintient un tableau comparatif évoquant aussi snarf, pavuk, fget, lftp, aria2, httrack. Une autre page décrit aussi les alternatives à libcurl.
  • malgré deux changements de noms, le projet a divers homonymes, aussi bien comme noms propres (dont un prix Nobel et une marque de fringues et de sport) que comme mots courants en anglais (boucle/boucler), ce qui ne rend pas les recherches faciles sur son seul nom.
Télécharger ce contenu au format Epub

Commentaires : voir le flux atom ouvrir dans le navigateur

Participez au Linux Presentation Day 2018

Jeudi 29 Mars

Chaque année, Montpel’libre, le GUL montpellierain, reprend l’organisation pour la Belgique et la France des journées dédiées à Linux Presentation Day. Cette année encore nous donnerons l’exemple en proposant une multitude d’activités de promotion autour de GNU/Linux.

Appel à participation : Linux Presentation Day est l’occasion de découvrir GNU/Linux et les logiciels libres. Un grand nombre de groupes d’utilisateurs de Linux (GUL) européens, ainsi que des entreprises et des universités, organisent deux fois par an, sur la même période, des rencontres afin de présenter GNU/Linux et les logiciels libres.

La prochaine édition de Linux Presentation Day pour le printemps 2018 est lancée.

Pour suivre et vous inscrire à cette opération, rendez‐vous sur les sites Web dédiés à votre pays ou sur le site international. Vous pouvez aussi écrire directement à contact@montpel-libre.fr.

Télécharger ce contenu au format Epub

Commentaires : voir le flux atom ouvrir dans le navigateur

Pages