---
Title: wget/curl
Date: 2022-07-25 13:45 CEST
Author: Fabrice
Category: cheat sheets
Tags: wget, curl, cli
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 favori.

Cependant, parcourir sa [documentation](https://www.gnu.org/software/wget/manual/wget.html) permet de se rendre compte de sa puissance.

Un autre outil proposant des fonctionnalités similaires est `curl`.
Il permet à 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 mon nombre de 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=<n> --accept <extensions autorisées> <url>
```

Où `<n>` 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 “<https://blog.epheme.re/images/covers/>”, on peut utiliser cette commande:
```sh
wget -rnpnH --cut-dirs=2 -A jpg https://blog.epheme.re/
```

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 <url>
```

Le nom des options est assez claire, et la version courte serait : `wget -mkEp -np <url>`

### 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 <logfile> <url>
```

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 <champ1>=<contenu1> -F <champ2>=<contenu2> <url>
```

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 photo=@ma_gueule_en_4k.jpg <url>
```

<!-- spl=fr
-->
