129 lines
5.3 KiB
Markdown
129 lines
5.3 KiB
Markdown
|
---
|
|||
|
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=<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/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 <url>
|
|||
|
```
|
|||
|
|
|||
|
Le nom des potions 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 picture=@face.jpg <url>
|
|||
|
```
|
|||
|
|
|||
|
<!-- spl=fr
|
|||
|
-->
|