Aller au contenu

Maitriser la commande wget

Mise à jour :

La commande wget est un outil incontournable pour tous ceux qui travaillent en ligne de commande sous Linux. Elle permet de télécharger facilement des fichiers depuis Internet, que ce soit via HTTP, HTTPS ou FTP. Grâce à sa simplicité d’utilisation et à sa robustesse, wget s’impose comme la solution idéale pour récupérer des fichiers, des pages web, ou même des sites entiers, sans interface graphique.

Contrairement à curl, qui excelle dans l’interaction avec des APIs et la manipulation fine des requêtes HTTP, wget se distingue par sa capacité à gérer des téléchargements complexes : reprise automatique en cas d’interruption, téléchargement récursif de sites web, gestion des authentifications, limitation de la bande passante, et bien plus encore.

Fonctionnalités de wget

La commande wget se distingue par sa polyvalence et sa robustesse pour le téléchargement de fichiers en ligne de commande. Voici les principales fonctionnalités qui en font un outil incontournable :

  • Support de plusieurs protocoles : HTTP, HTTPS et FTP.
  • Téléchargement de fichiers simples ou multiples.
  • Reprise automatique des téléchargements interrompus.
  • Téléchargement récursif de sites web.
  • Gestion de l’authentification et des cookies.
  • Limitation de la bande passante.
  • Téléchargement en arrière-plan.
  • Support des proxies.
  • Personnalisation des requêtes HTTP.

Grâce à ces fonctionnalités, wget s’adapte à tous les besoins, du téléchargement ponctuel à l’automatisation avancée dans des scripts.

Syntaxe de base

La commande wget s’utilise principalement selon la structure suivante :

Terminal window
wget [options] URL
  • options : Ce sont les différentes options que vous pouvez utiliser pour modifier le comportement de wget (voir section suivante pour les options essentielles).

  • URL : C’est l’adresse du fichier ou du site web que vous souhaitez télécharger.

Télécharger un seul fichier

Pour récupérer un fichier unique et l’enregistrer dans le répertoire courant, il suffit de taper :

Terminal window
wget https://exemple.com/fichier.zip

Chaque fichier est nommé d’après la dernière partie de l’URL (ici fichier.zip).

Si vous préférez spécifier un nom local différent, utilisez l’option -O :

Terminal window
wget -O mon_téléchargement.zip https://exemple.com/fichier.zip

Cette syntaxe enregistre la ressource sous le nom mon_téléchargement.zip.

Téléchargement silencieux pour les scripts

En contexte automatisé, il est souvent préférable de supprimer la sortie verbeuse ou de limiter les messages d’erreur :

  • -q ou --quiet : mode totalement silencieux.
  • -nv ou --no-verbose : désactive la barre de progression et les détails, mais affiche tout de même les erreurs c

Exemple :

Terminal window
wget -q -O fichier.txt https://exemple.com/data.txt

En cas d’échec HTTP (code ≥ 400), utilisez --server-response ou combinez avec --show-progress pour obtenir juste le strict nécessaire.

Pour exécuter le téléchargement en tâche de fond tout en continuant à recevoir un log, on peut combiner :

Terminal window
wget -b -o log_wget.txt https://exemple.com/grand_fichier.iso

Le téléchargement se poursuit en arrière-plan et le détail est écrit dans log_wget.txt.

Spécifier un timeout

Pour éviter de bloquer indéfiniment un script si le serveur ne répond pas, wget propose plusieurs temps d’attente.

L’option --timeout=SEC fixe un délai global d’attente du serveur (en secondes) avant d’abandonner la connexion :

Terminal window
wget --timeout=30 https://exemple.com/ressource

Si aucune donnée n’a été reçue en 30 s, wget interrompt la connexion.

  • --dns-timeout=SEC : délai maximal pour la résolution DNS.
  • --connect-timeout=SEC : délai maximal pour établir la connexion TCP.

Exemple :

Terminal window
wget --dns-timeout=10 --connect-timeout=15 https://exemple.com/fichier.tar.gz

Nombre de tentatives

Par défaut, wget réessaie 20 fois en cas de coupure ; pour modifier ce comportement, ajustez --tries :

Terminal window
wget --tries=5 https://exemple.com/data.csv

Ici, wget tentera au maximum 5 connexions avant d’abandonner.

Reprise automatique

Enfin, pour reprendre un téléchargement interrompu, utilisez -c :

Terminal window
wget -c https://exemple.com/film.mkv

L’option -c détecte la taille déjà reçue et continue la récupération à partir de cet octet.

Télécharger plusieurs fichiers

Lorsque vous devez récupérer en une seule commande un ensemble de ressources, wget propose plusieurs méthodes pour automatiser ces téléchargements, que ce soit via un fichier de liste, des motifs sur les URLs ou simplement une boucle shell.

Utiliser un fichier de liste d’URLs

L’option -i permet de traiter un fichier texte contenant une URL par ligne :

Terminal window
wget -i urls.txt
  • Format de urls.txt Chaque ligne du fichier doit contenir une URL complète, sans espace ni commentaire ; par exemple :

    https://exemple.com/photo1.jpg
    https://exemple.com/doc.pdf
    https://exemple.com/archive.tar.gz
  • Logs et renommage Pour garder une trace des téléchargements et renommer certains fichiers, on peut combiner :

    Terminal window
    wget -i urls.txt -O nom_personnalisé # renomme tout en même nom, à éviter
    wget -i urls.txt -o urls.log # journalise l’activité dans urls.log
  • Reprise en cas d’interruption Ajoutez -c pour reprendre les fichiers interrompus :

    Terminal window
    wget -c -i urls.txt

Globbing et motifs d’URLs

wget dispose d’un globbing simple qui permet de générer plusieurs URLs à partir d’un motif :

Terminal window
wget https://serveur/exemples/file[1-5].txt
  • Séquences Le motif [1-5] génère file1.txt, file2.txt, …, file5.txt.

  • Zéros en tête Pour produire file01.txt à file10.txt :

    Terminal window
    wget https://serveur/data/img[01-10].png
  • Listes personnalisées On peut combiner plusieurs blocs :

    Terminal window
    wget https://site/chapitre[1-3]-section[a-c].html

    produit chapitre1-sectiona.html, chapitre1-sectionb.html, etc.

Attention : le globbing se limite aux crochets [] et ne supporte pas les jokers * comme dans le shell.

Boucles Shell

Pour plus de flexibilité, les boucles Bash permettent d’itérer sur une collection d’URLs ou de suffixes :

Terminal window
for n in {1..20}; do
wget "https://exemple.com/vidéo_part${n}.mp4"
done
  • Lecture depuis un fichier :

    Terminal window
    for url in $(<urls.txt); do
    wget "$url"
    done
  • Renommage automatique :

    Terminal window
    count=1
    for url in $(<urls.txt); do
    wget -O "fichier_${count}.dat" "$url"
    ((count++))
    done
  • Exécution parallèle Attention, wget n’est pas nativement parallèle ; vous pouvez lancer plusieurs instances en arrière-plan :

    Terminal window
    for url in $(<urls.txt); do
    wget "$url" &
    done
    wait

Télécharger un site complet (mode récursif)

Pour cloner ou sauvegarder l’intégralité d’un site web, wget propose un mode récursif puissant et très configurable. Ce chapitre détaille les options clés pour contrôler la profondeur, les domaines autorisés, les types de fichiers à inclure ou exclure, et le mirroring “prêt-à-l’emploi”.

Activation du mode récursif

  • Option -r Active le téléchargement récursif : wget -r https://exemple.com

  • Option -m (mirror) Combine plusieurs paramètres pour un mirroring “tout-en-un” :

    Terminal window
    wget -m https://exemple.com

    Équivaut à -r -N -l inf --no-remove-listing — suit indéfiniment la profondeur (l inf), conserve les fichiers à jour (-N) et ne supprime pas les fichiers .listing.

Contrôler la profondeur

  • Option -l N Définit le niveau de profondeur maximal (par défaut 5) :

    Terminal window
    wget -r -l 2 https://exemple.com

    Ici, wget suit les liens vers deux niveaux au maximum.

  • Profondeur infinie Avec -l inf (ou dans le mode mirror), tous les niveaux sont explorés jusqu’à épuisement des pages accessibles.

Restreindre aux mêmes domaines

Pour éviter d’aller chercher des ressources hors du site principal :

  • Option -D domaine1,domaine2 Limite le téléchargement aux domaines listés :

    Terminal window
    wget -r -D exemple.com,cdn.exemple.com https://exemple.com
  • Option --span-hosts Autorise la traversée vers d’autres hôtes si nécessaire, en combinaison avec -D.

  • Option --exclude-domains Exclut certains domaines explicitement :

    Terminal window
    wget -r --exclude-domains pub.tracking.com https://exemple.com

Inclure ou exclure certains fichiers

Pour affiner ce qui est téléchargé :

  • Option --accept / --reject Spécifie des motifs de noms de fichiers :

    Terminal window
    wget -r --accept jpg,png,html https://exemple.com

    Ne récupère que les images et pages HTML.

  • Option --accept-regex / --reject-regex Permet des filtres basés sur des expressions régulières :

    Terminal window
    wget -r --reject-regex ".*\?sessionid=.*" https://exemple.com

Options complémentaires pour le mirroring

  • Conserver la structure des répertoires Par défaut, wget -r recrée l’arborescence du site dans votre dossier local.

  • Mettre à jour les fichiers existants Avec -N, n’écrase que si la copie distante est plus récente.

  • Générer un index HTML local Option --convert-links convertit tous les liens pour qu’ils pointent vers les fichiers locaux :

    Terminal window
    wget -m --convert-links https://exemple.com
  • Limiter la vitesse Utilisez --limit-rate pour ne pas saturer votre connexion, même en mode mirror.

Gestion des redirections et authentifications

Pour accéder à des ressources protégées ou dont l’URL finale diffère de l’URL initiale, wget fournit plusieurs options pour suivre les redirections HTTP et pour gérer divers mécanismes d’authentification.

Suivre les redirections HTTP

Lorsqu’une URL renvoie un code 3xx, wget peut automatiquement suivre vers l’emplacement final :

Terminal window
wget --max-redirect=20 https://exemple.com/ancien-lien
  • --max-redirect=N : nombre maximal de redirections autorisées (par défaut 20).
  • --trust-server-names : renomme automatiquement le fichier de sortie selon le nom fourni par le serveur à la dernière redirection.

Ces options permettent d’éviter les erreurs “404” ou “301 Moved Permanently” non suivies et garantissent que vous récupérez le contenu réel.

Authentification HTTP Basic et Digest

Pour accéder à des pages protégées par authentification basique ou digest, deux paires d’options sont disponibles :

Terminal window
wget --http-user=utilisateur --http-password=motdepasse https://exemple.com/zone-securisee
  • --http-user=USER et --http-password=PASS : authentification HTTP Basic.
  • --auth-no-challenge : envoie les identifiants sans attendre une invitation du serveur (utile pour certains serveurs mal configurés).
  • --http-auth-method=[basic|digest] : force l’usage de Basic ou Digest selon le besoin.

Authentification par cookies

Pour simuler une session de navigateur, conserver ou réutiliser des cookies :

Terminal window
wget --save-cookies cookies.txt --keep-session-cookies --post-data="user=Alice&pass=1234" https://exemple.com/login
wget --load-cookies cookies.txt https://exemple.com/ma-page
  • --save-cookies FICHIER : enregistre les cookies reçus dans un fichier.
  • --keep-session-cookies : inclut aussi les cookies de session dans le fichier (par défaut, seuls les cookies persistants sont sauvés).
  • --load-cookies FICHIER : recharge les cookies préalablement sauvegardés pour les envoyer avec la requête.

Cette méthode est très utile pour automatiser l’accès à des zones nécessitant une connexion préalable.

Authentification par en-tête personnalisé (tokens)

Certaines API ou applications web utilisent des tokens Bearer ou d’autres mécanismes d’en-tête :

Terminal window
wget --header="Authorization: Bearer MON_JETON" https://api.exemple.com/ressources
  • --header="Clé: Valeur" : ajoute un en-tête HTTP personnalisé.
  • Vous pouvez spécifier plusieurs fois --header pour inclure aussi Content-Type, Accept, etc.

Authentification FTP/FTPS

Pour les transferts de fichiers via FTP ou FTPS, wget gère aussi l’authentification :

Terminal window
wget --ftp-user=ftpuser --ftp-password=ftppass ftp://ftp.exemple.com/dossier/fichier.txt
  • --ftp-user=USER et --ftp-password=PASS : identifiants pour FTP ou FTPS.
  • Pour un serveur FTPS explicite (FTP sur SSL/TLS), utilisez l’URL commençant par ftps://.

Cette flexibilité fait de wget un outil universel pour accéder à quasiment tous les services web ou FTP protégés.

Proxys et configurations réseau

Lorsqu’un accès direct à Internet n’est pas possible ou que vous souhaitez acheminer vos téléchargements via un serveur intermédiaire, wget met à disposition plusieurs options pour configurer et utiliser des proxies, ainsi que pour ajuster les résolutions DNS et le comportement IPv4/IPv6.

Passer par un proxy HTTP/HTTPS

  • Définir le proxy via variables d’environnement

    Terminal window
    export http_proxy="http://user:pass@proxy.exemple.com:3128/"
    export https_proxy="http://user:pass@proxy.exemple.com:3128/"
    wget https://exemple.com/fichier.txt

    Les variables http_proxy et https_proxy sont automatiquement prises en compte par wget.

  • Options en ligne de commande

    Terminal window
    wget --proxy-user=utilisateur --proxy-password=motdepasse \
    --execute="http_proxy = http://proxy.exemple.com:3128" \
    https://exemple.com/data.csv

    Permet de spécifier les identifiants et l’hôte du proxy sans toucher aux variables d’environnement.

Désactiver l’usage du proxy

Pour une requête particulière, si vous souhaitez ignorer le proxy configuré :

Terminal window
wget --no-proxy https://exemple.com/ressource

Cette option force wget à établir une connexion directe.

Forcer IPv4 ou IPv6

Sur des réseaux mixtes, il peut être nécessaire de contraindre la famille d’adresses IP utilisée :

  • Forcer IPv4

    Terminal window
    wget -4 https://exemple.com/fichier.img
  • Forcer IPv6

    Terminal window
    wget -6 https://exemple.com/fichier.img

Ces options peuvent résoudre des problèmes de connectivité liés à certaines configurations DNS.

Utiliser un fichier de configuration .wgetrc

Pour conserver vos réglages de proxy et de timeouts sans répéter les options, vous pouvez créer un fichier de configuration personnel nommé .wgetrc dans votre répertoire personnel. Ce fichier permet de définir des valeurs par défaut pour toutes vos commandes wget, ce qui est particulièrement utile pour les environnements automatisés ou les scripts.

Exemple de fichier .wgetrc :

http_proxy = http://proxy.exemple.com:3128/
https_proxy = http://proxy.exemple.com:3128/
no_proxy = localhost,127.0.0.1
dns_timeout = 5
connect_timeout = 10
read_timeout = 20

Ainsi, chaque appel à wget appliquera ces valeurs par défaut, simplifiant vos scripts et commandes ad hoc.

Utilisation avancée

Au-delà des téléchargements basiques et des modes miroir, wget propose des fonctionnalités avancées qui facilitent l’intégration dans des scripts complexes, l’automatisation conditionnelle, et le contrôle fin du comportement réseau.

Modification du User-Agent

Certains serveurs adaptent leur réponse en fonction du client identifié. Pour forcer un User-Agent précis :

Terminal window
wget --user-agent="Mozilla/5.0 (compatible; MonScraper/1.0)" \
https://exemple.com/page

Cela peut être utile pour contourner des filtrages basés sur le User-Agent ou tester la réactivité du serveur à différents navigateurs.

Exécution de commandes après téléchargement

Grâce à l’option --execute ou à la combinaison avec un script shell, vous pouvez enchaîner automatiquement des actions post-téléchargement :

Terminal window
wget https://exemple.com/data.csv && \
csvtool readable data.csv > data_pretty.txt

Ou dans .wgetrc :

execute = chmod 644 # applique le chmod sur les fichiers récupérés

Limitation de bande passante et quotas

Pour protéger votre réseau ou respecter des plafonds, --limit-rate restreint le débit :

Terminal window
wget --limit-rate=200k https://exemple.com/video.mp4

Vous pouvez également définir un nombre maximal de téléchargements simultanés dans un script via un contrôle de boucle.

Utilisation conditionnelle et scripts d’automatisation

En combinant wget avec des tests shell, vous pouvez réaliser des boucles de vérification et de téléchargement :

Terminal window
while true; do
wget -N https://exemple.com/rapport_quotidien.pdf
sleep 86400 # attend 24 h
done

Ou surveiller un fichier Last-Modified :

Terminal window
if wget --spider --server-response https://exemple.com/page 2>&1 \
| grep -q "Last-Modified: .*2025"; then
wget https://exemple.com/page -O nouvelle.html
fi

Ressources complémentaires

Contrôle de connaissances

Pourquoi ce contrôle ?

Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.

🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.

🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.

💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.

Bonne chance ! 🚀

Conclusion

En résumé, wget offre une solution fiable et non interactive pour télécharger des fichiers via HTTP, HTTPS et FTP, en supportant la reprise automatique et l’exécution en arrière-plan. Sa capacité de téléchargement récursif et de mirroring de sites entiers en fait un outil incontournable pour copier et synchroniser des contenus web. Léger, portable et facilement scriptable, wget s’intègre naturellement dans les chaînes d’automatisation et les environnements serveur pour simplifier les tâches de récupération et de sauvegarde de données.