đź“° [Linux] Wget ou Curl?

📅 June 5th, 2016 ⏲️ 3 mins 3 secs

Avant tous, pour ceux qui ne connaissent pas Wget et Curl (Client URL Request Library), se sont deux commandes Linux développées pour télécharger des fichiers depuis INTERNET. Le principe est simple, ces deux commandes se comportent comme le navigateur mais gardent le contenus en sortie qui sera principalement affiché dans le navigateur mais là dans le terminal.
Il existe plusieurs outils qui nous permettent de tĂ©lĂ©charger un fichier depuis un lien mais wget et curl se sont implantĂ©s par dĂ©faut dans les noyaux Linux car ils sont libres et open-sources (voici le lien du code source de CURL) donc c’est quoi la diffĂ©rence entre ces deux commandes?
Ces deux commandes peuvent:

  • TĂ©lĂ©charger un contenu depuis un lien FTP, HTTP ou bien HTTPS
  • Envoyer des requĂŞtes HTTP/POST vers un serveur web.
  • Les deux supportent les Cookies
  • Les deux supportent les META LINKs

La différence?

Wget est un outil libre avec une licence GPL v3 par contre curl est sous la licence MIT ce qui lui permet d’adopter des protocoles qui ne sont pas libres et bien sous la mĂŞme licence.

  • Curl est une bibliothèque, libcurl- dont on peut l’utiliser dans un projet C++
  • Curl utilise la sortie stdout dont on peut crĂ©er un PIPE avec cette commande, par exemple je rĂ©cupère un fichier texte depuis un lien et la sortie dont c’est le contenu du fichier, je peux l’utiliser comme paramètre dans une autre commande ou bien tĂ©lĂ©charger un script shell et l’exĂ©cuter.
  • Curl supporte beaucoup de protocols comme FTP, FTPS, Gopher, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, POP3, IMAP, SMB/CIFS, SMTP, RTMP et RTSP. Wget supporte que HTTP, HTTPS and FTP.
  • CURL supporte beaucoup de mĂ©thodes d’authentification, spĂ©cialement en HTTP: Basic, Digest, NTLM et Negotiate
  • Curl nous offre une connexion bidirectionnelle. il offre l’upload et l’envoie des fichiers en multipart/form-data
  • Curl supporte la compression du contenu gzip et deflate et rĂ©alise la dĂ©compression automatiquement.
  • curl supporte le HTTP/2 et rĂ©alise en dual-stack connects en utilisant le Happy Eyeballs

Pourquoi Gnu/Linux  n’adopte pas curl par dĂ©faut?

La question est simple car GNU/Linux est un projet qui vise Ă  crĂ©er un OS 100% libre et sous la licence GPL v3, c’est pour cela qu’on trouve wget par dĂ©faut.
En 19 Novembre 1997, une compagnie japonaise CURL Corporation a enregistrĂ© son nom et son nom de domaine curl.com et obtient sa trademark en 18 Mai 1998 sous l’immatricule N° 75487363. Le suĂ©dois Daniel Stenberg le chef du projet cURL a continuĂ© son travail avec le nom cURL car au suède le terme “varumärke” n’existait mĂŞme pas. Ce dernier a Ă©tĂ© contactĂ© par la compagnie Curl Corporation en 11 Aout 2001 pour lui mentionner la collision de deux noms lors du publication de son projet en 6 Aout 2001 dont il a publiĂ© une lettre au grand publique pour expliquer cette collision.
[Source + la lettre]
On conclu alors que les deux outils sont des outils trop cool et simples à utiliser sur un terminal. On peut les utiliser afin de tester un serveur web don’t au lieu de crĂ©er un formulaire pour tester la rĂ©ception des donnĂ©es, on envoie directement les donnĂ©es par une commande curl.
Par exemple: envoyer un tableau de deux variables vers un script PHP

curl -d "username=admin&password=admin&submit=Login" --dump-header headers http://localhost/Login.php

ou bien envoyer les donnĂ©es sous format d’un JSON,

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://hostname/resource | json