2022-10-05 21:45 Temps de lecture : 13 min

10 exemples de commandes wget pour vous aider à dépanner - test wget

Un des outils fréquemment employés par les administrateurs système est wget. Son utilité est indéniable, particulièrement lorsqu'il s'agit de résoudre des problèmes liés au web.

Qu'est-ce que la commande wget ?

La commande wget est un utilitaire en ligne de commande très prisé dans les environnements Unix/Linux pour extraire du contenu web. Cet outil gratuit permet de télécharger des fichiers de manière non interactive. Wget est compatible avec les protocoles HTTPS, HTTP et FTP dès son installation. De surcroît, il permet l'utilisation de serveurs proxy HTTP.

Comment wget facilite-t-il la résolution de problèmes ?

Ses applications sont multiples.

En tant qu'administrateur système, vous travaillez souvent en ligne de commande. Lors du diagnostic de problèmes liés à des applications web, il n'est pas toujours nécessaire de consulter une page web entière, mais plutôt de vérifier la connectivité. Vous pouvez également avoir besoin de vérifier des sites intranet ou de télécharger une page spécifique pour en analyser le contenu.

wget fonctionne de manière non interactive, ce qui autorise son exécution en arrière-plan, même lorsque vous êtes déconnecté. Il est parfois crucial de se déconnecter du système tout en continuant à récupérer des fichiers. wget peut alors accomplir sa tâche en toute autonomie.

Cet utilitaire permet également de télécharger l'intégralité d'un site web sur votre machine locale. Il peut suivre les liens présents dans les pages XHTML et HTML pour créer une version locale du site. Pour ce faire, il télécharge les pages de manière récursive. Cette fonctionnalité est très utile pour télécharger des pages ou des sites importants afin de les consulter hors ligne.

Illustrons son fonctionnement. La syntaxe de wget est la suivante :

wget [option] [URL]

Télécharger une page web

Essayons de télécharger une page, par exemple, github.com :

wget github.com

Si la connexion est établie, la page d'accueil sera téléchargée et le résultat ressemblera à ce qui suit :

URL transformed to HTTPS due to an HSTS policy
--2020-02-23 10:45:52--  https://github.com/
Resolving github.com (github.com)... 140.82.118.3
Connecting to github.com (github.com)|140.82.118.3|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘index.html’

index.html                                       [ <=>                                                                                        ] 131.96K  --.-KB/s    in 0.04s   

2020-02-23 10:45:52 (2.89 MB/s) - ‘index.html’ saved [135126]

Télécharger plusieurs fichiers

Cette fonctionnalité est très pratique lorsque vous avez besoin de télécharger plusieurs fichiers simultanément. Elle peut vous donner un aperçu de l'automatisation des téléchargements via des scripts.

Tentons de télécharger les fichiers Python 3.8.1 et 3.5.1 :

wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz

La syntaxe est donc la suivante :

wget URL1 URL2 URL3

Il suffit de laisser un espace entre chaque URL.

Limiter la vitesse de téléchargement

Cette option est particulièrement utile pour tester le temps de téléchargement de vos fichiers avec différentes largeurs de bande.

En utilisant l'option –limit-rate, vous pouvez contrôler la vitesse de téléchargement.

Voici le résultat du téléchargement du fichier Nodejs :

--2020-02-23 10:59:58--  https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14591852 (14M) [application/x-xz]
Saving to: ‘node-v12.16.1-linux-x64.tar.xz’

node-v12.16.1-linux-x64.tar.xz               100%[===========================================================================================>]  13.92M  --.-KB/s    in 0.05s   

2020-02-23 10:59:58 (272 MB/s) - ‘node-v12.16.1-linux-x64.tar.xz’ saved [14591852/14591852]

Le téléchargement du fichier de 13,92 Mo a pris 0,05 seconde. Limitons maintenant la vitesse à 500K :

--2020-02-23 11:00:18--  https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz
Resolving nodejs.org (nodejs.org)... 104.20.23.46, 104.20.22.46, 2606:4700:10::6814:162e, ...
Connecting to nodejs.org (nodejs.org)|104.20.23.46|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 14591852 (14M) [application/x-xz]
Saving to: ‘node-v12.16.1-linux-x64.tar.xz.1’

node-v12.16.1-linux-x64.tar.xz.1             100%[===========================================================================================>]  13.92M   501KB/s    in 28s     

2020-02-23 11:00:46 (500 KB/s) - ‘node-v12.16.1-linux-x64.tar.xz.1’ saved [14591852/14591852]

En réduisant la bande passante, le téléchargement a pris plus de temps, soit 28 secondes. Si vos utilisateurs se plaignent de téléchargements lents et que vous soupçonnez un problème de bande passante réseau, vous pouvez utiliser l'option –limit-rate pour simuler ce problème.

Télécharger en arrière-plan

Le téléchargement de fichiers volumineux, ou le paramétrage de la limite de débit, peut prendre du temps. Vous n'avez pas forcément envie de rester devant votre terminal ?

L'argument -b permet de lancer wget en arrière-plan :

Continuing in background, pid 25430.
Output will be written to ‘wget-log.1’.

Ignorer l'erreur de certificat

Cette fonctionnalité est pratique pour vérifier les applications web intranet qui ne disposent pas de certificat valide. Par défaut, wget génère une erreur lorsqu'un certificat n'est pas reconnu.

--2020-02-23 11:24:59--  https://expired.badssl.com/
Resolving expired.badssl.com (expired.badssl.com)... 104.154.89.105
Connecting to expired.badssl.com (expired.badssl.com)|104.154.89.105|:443... connected.
ERROR: cannot verify expired.badssl.com's certificate, issued by ‘CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB’:
  Issued certificate has expired.
To connect to expired.badssl.com insecurely, use `--no-check-certificate'.

Dans l'exemple ci-dessus, le certificat de l'URL a expiré. La solution proposée est d'utiliser l'option –no-check-certificate, qui désactive la validation du certificat :

--2020-02-23 11:33:45--  https://untrusted-root.badssl.com/
Resolving untrusted-root.badssl.com (untrusted-root.badssl.com)... 104.154.89.105
Connecting to untrusted-root.badssl.com (untrusted-root.badssl.com)|104.154.89.105|:443... connected.
WARNING: cannot verify untrusted-root.badssl.com's certificate, issued by ‘CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US’:
  Self-signed certificate encountered.
HTTP request sent, awaiting response... 200 OK
Length: 600 [text/html]
Saving to: ‘index.html.6’

index.html.6                                 100%[===========================================================================================>]     600  --.-KB/s    in 0s      

2020-02-23 11:33:45 (122 MB/s) - ‘index.html.6’ saved [600/600]

N'est-ce pas pratique ?

Il est également possible de consulter l'en-tête de réponse HTTP d'un site directement depuis le terminal.

L'option -S affiche l'en-tête, comme illustré ci-dessous pour Coursera :

--2020-02-23 11:47:01--  https://www.coursera.org/
Resolving www.coursera.org (www.coursera.org)... 13.224.241.48, 13.224.241.124, 13.224.241.82, ...
Connecting to www.coursera.org (www.coursera.org)|13.224.241.48|:443... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Content-Type: text/html
  Content-Length: 511551
  Connection: keep-alive
  Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0
  Date: Sun, 23 Feb 2020 11:47:01 GMT
  etag: W/"7156d-WcZHnHFl4b4aDOL4ZSrXP0iBX3o"
  Server: envoy
  Set-Cookie: CSRF3-Token=1583322421.s1b4QL6OXSUGHnRI; Max-Age=864000; Expires=Wed, 04 Mar 2020 11:47:02 GMT; Path=/; Domain=.coursera.org
  Set-Cookie: __204u=9205355775-1582458421174; Max-Age=31536000; Expires=Mon, 22 Feb 2021 11:47:02 GMT; Path=/; Domain=.coursera.org
  Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  X-Content-Type-Options: nosniff
  x-coursera-render-mode: html
  x-coursera-render-version: v2
  X-Coursera-Request-Id: NCnPPlYyEeqfcxIHPk5Gqw
  X-Coursera-Trace-Id-Hex: a5ef7028d77ae8f8
  x-envoy-upstream-service-time: 1090
  X-Frame-Options: SAMEORIGIN
  x-powered-by: Express
  X-XSS-Protection: 1; mode=block
  X-Cache: Miss from cloudfront
  Via: 1.1 884d101a3faeefd4fb32a5d2a8a076b7.cloudfront.net (CloudFront)
  X-Amz-Cf-Pop: LHR62-C3
  X-Amz-Cf-Id: vqvX6ZUQgtZAde62t7qjafIAqHXQ8BLAv8UhkPHwyTMpvH617yeIbQ==
Length: 511551 (500K) [text/html]

Modifier l'agent utilisateur

Il peut être utile de se connecter à un site en utilisant un agent utilisateur spécifique, ou celui d'un navigateur en particulier. L'option –user-agent permet de spécifier l'agent utilisateur. L'exemple ci-dessous utilise l'agent utilisateur "MyCustomUserAgent" :

wget https://gf.dev --user-agent="MyCustomUserAgent"

Lors du développement d'une application, il arrive que l'URL de test ne soit pas encore disponible. Ou encore, il peut être nécessaire de tester une instance HTTP avec une adresse IP, tout en fournissant l'en-tête de l'hôte pour le bon fonctionnement de l'application. L'option –header est alors d'une grande aide.

Prenons l'exemple d'un test de l'adresse http://10.10.10.1 avec l'en-tête d'hôte "application.com" :

wget --header="Host: application.com" http://10.10.10.1

Non seulement l'hôte, mais tout type d'en-tête peut être injecté.

Se connecter via un proxy

Dans un environnement DMZ, l'accès direct aux sites Internet peut être impossible. L'utilisation d'un proxy est alors indispensable pour établir la connexion :

wget -e use_proxy=yes http_proxy=$PROXYHOST:PORT http://externalsite.com

N'oubliez pas de remplacer les variables $PROXYHOST et PORT par les valeurs correctes.

Se connecter avec un protocole TLS spécifique

Il est généralement recommandé d'utiliser OpenSSL pour tester un protocole TLS, mais wget peut aussi être employé à cette fin.

La commande suivante force wget à se connecter en TLS 1.2 :

wget –secure-protocol=TLSv1_2 https://example.com

Conclusion

La maîtrise des commandes est essentielle dans votre travail. J'espère que ce guide vous a donné un aperçu des possibilités offertes par wget.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.