--- Title: wget/curl Date: 2022-07-25 13:45 CEST Author: Fabrice Category: cheat sheets Tags: wget, curl Slug: wget-curl Header_Cover: ../images/covers/speedboat.jpg Summary: Quelques commandes wget et curl utiles dans la vie de tous les jours. Lang: fr --- `wget` est un outil qui permet le téléchargement de manière non interactive de contenu sur des sites via FTP/HTTP(s), etc. Dans son utilisation la plus basique, il permet de télécharger du contenu en tapant simplement `wget ${url}` dans son émulateur de terminal favoris. Cependant, en parcourant sa [documentation](https://www.gnu.org/software/wget/manual/wget.html) permet de se rendre compte de sa puissance. De même, `curl` est un autre outil proposant des fonctionnalités similaires. Il sert à envoyer de manière simple des requêtes sur internet. Un coup d'œil à sa [documentation](https://curl.haxx.se/docs/manpage.html) nous montre qu'il gère une plus grande quantité protocoles comparativement à `wget`. Cependant, `wget` peut suivre les liens (récursivement), filtrer du contenu pour les requêtes, convertir en liens relatifs (ou absolu),… Ainsi, ces deux outils couvrent des cas d'usage différents (même si leur intersection est non-vide). Pour résumer, `wget` se montrera être un couteau-suisse très utile dans les cas où l'on souhaite parcourir un site internet vu comme un graphe de pages liées entre-elles par des liens hypertextes là où `curl` se montrera plus intéressant pour la manipulation de requêtes à bas niveau. De plus, pour l'analyse des requêtes, les navigateurs modernes permettent d'exporter les requêtes directement sous forme de commande `curl` depuis l'inspecteur web. Cela permet de les bricoler de manière plus simple que depuis [netcat](https://en.wikipedia.org/wiki/Netcat) par exemple. Pour conclure cette introduction, comme je ne suis pas un `wget`/`curl` _poweruser_, il y aura sans doute de nombreuses informations qui seront assez basiques. Néanmoins, comme je l'ai indiqué, ce billet me servira de pense-bête pour [réduire mes requêtes à Google](https://degooglisons-internet.org/). # wget ## Télécharger un dossier Pour télécharger un dossier spécifique: ```sh wget --recursive --no-parent --no-host-directories --cut-dirs= --accept ``` Où `` représente le la profondeur de recherche dans les sous-dossiers. Par exemple, si l'on souhaite télécharger le contenu de ce blog sans télécharger les images de couverture des articles situés à l'adresse “”, on peut utiliser cette commande: ```sh wget -rnpnH --cut-dirs=2 -A jpg https://blog.epheme.re/images/covers/ ``` Une méthode plus simple pour ce cas d'usage, si l'on n'a pas besoin de la structure des répertoires, il est possible d’utiliser l’option `--no-directories`/`-nd`. En revanche, l'option `--cut-dirs` peut se révéler utile si l'on souhaite garder des informations structurelles sur l'organisation des dossiers si elle est pertinente, par exemple si les fichiers sont triés par date. Pour ignorer certains fichiers, il est aussi possible d'utiliser d'option `--reject`/`-R`, qui accepte également les expressions régulières (tout comme `--accept`/`-A`), dont le type peut-être précisé à l'aide de l'option `--regex-type` ## Créer un miroir pour un site Une autre utilisation utile de `wget` est de faire une copie locale d'un site web. Pour ce faire, la commande longe est : ```sh wget --mirror --no-host-directories --convert-links --adjust-extension --page-requisites --no-parent ``` Le nom des potions est assez claire, et la version courte serait : `wget -mkEp -np ` ### Ignorer `robots.txt` Il arrive parfois que le fichier [`robots.txt`](https://en.wikipedia.org/wiki/Robots_exclusion_standard) interdise l'accès à certaines ressources. Pour l'ignorer, il suffit de rajouter d'option `-e robots=off`. ### Nombre d'essai IL se peut que le serveur soit saturé et nous demande d'attendre pour quelques ressources. Lorsque cela arrive, `wget` va essayer à de nombreuses reprises (20 fois par défaut) de récupérer ladite ressource, ce qui peut ralentir la récupération des données lors d'un miroir, surtout si le délai d’attente maximal est élevé. Il est possible de réduire le nombre d'essai avec l'option `--tries`/`-t`. ## Détection de liens morts Il est possible d'utilise l'option `--spider` pour ne pas télécharger les fichiers mais simplement sauter de liens en liens (comme une araignée sur sa toile). Cette fonctionnalité peut ainsi être exploitée pour débogguer son site web en récupérant le résultat de cette recherche via l'option `--output-file`/`-o`. ```sh wget --spider -r -nd -o ``` La liste des liens morts se retrouvera à la fin du fichier d’historique. ## curl ## Envoyer une requête POST Un de mes cas d'usage les plus courants, pour communiquer avec des APIs par exemple, est l'envoie de requêtes POST faites à la main avec amour. La syntaxe est assez simple dans ce cas, il suffit d'envoyer ce que l'on souhaite à l'option `--form``-F`. ```sh curl -F = -F = ``` On peut aussi signaler qu'il est possible d'envoyer un fichier en précédent le nom de fichier par une arobase `@`: ```sh curl -F picture=@face.jpg ```