wget/curl
This commit is contained in:
128
content/cheat-sheets/wget-fr.md
Normal file
128
content/cheat-sheets/wget-fr.md
Normal file
@ -0,0 +1,128 @@
|
||||
---
|
||||
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
|
||||
-->
|
Reference in New Issue
Block a user