curl et wget sont les deux outils de téléchargement en ligne de commande présents sur quasiment tous les serveurs Linux. Installer un outil depuis un script, récupérer une release GitHub, tester une API REST, télécharger un dump de base de données — tout passe par l’un ou l’autre. Ce guide vous montre les gestes concrets pour les deux, et comment choisir entre eux.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Télécharger un fichier avec
curl -L -Oet avecwget - Reprendre un téléchargement interrompu avec
wget -cetcurl -C - - Utiliser le mode silencieux
curl -fsSLdans les scripts - Récupérer l’URL de la dernière release GitHub dynamiquement
- Passer des headers et des tokens d’authentification
- Diagnostiquer une erreur HTTP avec
curl -vou--fail - Choisir entre curl et wget selon la situation
curl vs wget : quelle différence ?
Section intitulée « curl vs wget : quelle différence ? »| Capacité | curl | wget |
|---|---|---|
| Téléchargement simple | ✅ | ✅ |
Reprise automatique (-C -) | Manuel avec -C - | Automatique avec -c |
| Suivi de redirections | Manuel avec -L | Automatique |
| Téléchargement récursif (miroir web) | ❌ | ✅ |
| Requêtes REST (POST, PUT, DELETE) | ✅ excellent | Basique |
| Lectures de pipes / stdin | ✅ | ❌ |
| Disponible sur macOS/Windows WSL | ✅ partout | Pas toujours |
| Usage premier | API, scripting, diagnostic | Téléchargement simple, miroir |
Règle pratique : wget pour télécharger simplement. curl pour les scripts, les APIs et le diagnostic.
curl — télécharger un fichier
Section intitulée « curl — télécharger un fichier »Téléchargement basique
Section intitulée « Téléchargement basique »curl -L -O https://example.com/fichier.tar.gz| Option | Rôle |
|---|---|
-L | Suivre les redirections HTTP (301/302) — presque toujours nécessaire |
-O | Sauvegarder avec le nom de fichier de l’URL |
-o nom.tar.gz | Sauvegarder sous un nom spécifique |
Sans -L, curl s’arrête sur la première redirection et vous donne le corps de la réponse de redirection, pas le fichier.
Télécharger avec suivi de progression
Section intitulée « Télécharger avec suivi de progression »curl -L -O --progress-bar https://example.com/archive.tar.gzMode silencieux pour les scripts
Section intitulée « Mode silencieux pour les scripts »curl -fsSL https://example.com/install.sh | bash| Option | Rôle |
|---|---|
-f | Fail silently : retourne un code d’erreur si HTTP ≥ 400 (sinon curl affiche le corps d’erreur) |
-s | Silent : pas de barre de progression ni de statistiques |
-S | Afficher quand même les erreurs même en mode -s |
-L | Suivre les redirections |
Reprendre un téléchargement interrompu
Section intitulée « Reprendre un téléchargement interrompu »curl -L -C - -O https://example.com/archive-10go.tar.gz-C - demande à curl de détecter automatiquement la position de reprise dans le fichier existant.
curl — récupérer la dernière release GitHub
Section intitulée « curl — récupérer la dernière release GitHub »Un cas d’usage courant dans les scripts d’installation :
# Récupérer l'URL du dernier binaire Linux/amd64 de kubectlRELEASE=$(curl -fsSL https://storage.googleapis.com/kubernetes-release/release/stable.txt)curl -LO "https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/kubectl"Avec l’API GitHub Releases :
# Dernière version de jqVERSION=$(curl -fsSL https://api.github.com/repos/jqlang/jq/releases/latest | grep '"tag_name"' | cut -d'"' -f4)curl -LO "https://github.com/jqlang/jq/releases/download/${VERSION}/jq-linux-amd64"curl — passer des headers et s’authentifier
Section intitulée « curl — passer des headers et s’authentifier »Header HTTP personnalisé
Section intitulée « Header HTTP personnalisé »curl -H "Accept: application/json" https://api.example.com/dataToken Bearer (API REST)
Section intitulée « Token Bearer (API REST) »curl -H "Authorization: Bearer ${API_TOKEN}" https://api.example.com/resourceAuthentification basique
Section intitulée « Authentification basique »curl -u utilisateur:mot_de_passe https://nexus.example.com/repository/artifacts/curl — diagnostiquer une erreur HTTP
Section intitulée « curl — diagnostiquer une erreur HTTP »# Voir les headers de la réponsecurl -I https://example.com/
# Mode verbose — headers requête ET réponsecurl -v https://example.com/
# Afficher seulement le code HTTPcurl -o /dev/null -s -w "%{http_code}\n" https://example.com/200Pour tester un endpoint d’API :
# POST JSON et afficher la réponse formatéecurl -s -X POST \ -H "Content-Type: application/json" \ -d '{"key": "value"}' \ https://api.example.com/endpoint | jq .wget — télécharger un fichier
Section intitulée « wget — télécharger un fichier »Téléchargement simple
Section intitulée « Téléchargement simple »wget https://example.com/fichier.tar.gzwget suit automatiquement les redirections et sauvegarde avec le nom original.
Télécharger sous un nom différent
Section intitulée « Télécharger sous un nom différent »wget -O mon-fichier.tar.gz https://example.com/release-1.0.tar.gzMode silencieux
Section intitulée « Mode silencieux »wget -q https://example.com/fichier.tar.gzReprendre un téléchargement interrompu
Section intitulée « Reprendre un téléchargement interrompu »wget -c https://example.com/archive-10go.tar.gz-c (continue) reprend automatiquement là où le téléchargement s’est arrêté — plus simple qu’avec curl.
Limiter la bande passante
Section intitulée « Limiter la bande passante »wget --limit-rate=1m https://example.com/archive.tar.gzwget — téléchargement récursif
Section intitulée « wget — téléchargement récursif »wget peut aspirer un site web ou un répertoire FTP :
# Télécharger récursivement un répertoire d'un sitewget -r -np -nH --cut-dirs=1 https://example.com/docs/
# -r : récursif# -np : no-parent (ne pas remonter au niveau supérieur)# -nH : pas de répertoire du hostname# --cut-dirs=1 : supprimer le premier niveau de chemin /docs/Comparer curl et wget en pratique
Section intitulée « Comparer curl et wget en pratique »# curlcurl -L -O https://example.com/archive.tar.gz
# wgetwget https://example.com/archive.tar.gzLes deux produisent le même résultat. wget est légèrement plus court.
# Privilégier curl pour les scripts — -fsSL est la combinaison standardcurl -fsSL https://release.example.com/install.sh | sudo bash
# wget équivalentwget -qO- https://release.example.com/install.sh | sudo bashcurl -fsSL est le standard de facto dans les scripts d’installation de la communauté DevOps.
# wget — reprise automatique avec -cwget -c https://example.com/archive-10go.tar.gz
# curl — reprise manuelle avec -C -curl -L -C - -O https://example.com/archive-10go.tar.gzwget -c est plus simple. curl -C - est équivalent mais demande l’option explicite.
Vérification après téléchargement
Section intitulée « Vérification après téléchargement »Après un téléchargement, vérifiez toujours l’intégrité du fichier si le site fournit un checksum :
# Télécharger le fichier et son checksumwget https://example.com/archive.tar.gzwget https://example.com/archive.tar.gz.sha256
# Vérifiersha256sum -c archive.tar.gz.sha256archive.tar.gz: OKPour une vérification complète avec GPG, voir le guide Vérifier l’intégrité d’un fichier.
Dépannage courant
Section intitulée « Dépannage courant »| Symptôme | Cause probable | Solution |
|---|---|---|
curl: (60) SSL certificate problem | Certificat non reconnu | curl -k (insécure, à éviter) ou corriger les CA : apt install ca-certificates |
wget: unable to resolve host | DNS non configuré | ping 8.8.8.8 pour tester la connectivité, cat /etc/resolv.conf |
| Code retour 0 malgré une erreur 404 | Pas de -f sur curl | Ajouter -f ou tester avec curl -o /dev/null -w "%{http_code}" |
| Téléchargement très lent | Bande passante limitée ou serveur saturé | wget --limit-rate pour ne pas saturer le réseau local |
wget: command not found | wget non installé | apt install wget ou dnf install wget |
À retenir
Section intitulée « À retenir »curl -L -Oetwgettéléchargent un fichier —wgetsuit les redirections automatiquement,curlnécessite-L.curl -fsSLest la combinaison standard pour les scripts d’installation : fail silently, no progress, follow redirects.wget -creprend un téléchargement interrompu plus simplement quecurl -C -.- Toujours vérifier le checksum d’un fichier téléchargé avant de l’utiliser en production.
wgetfait du récursif,curlsait faire des requêtes REST complexes.