wget/curl
This commit is contained in:
parent
d719cb39ca
commit
46b70b9678
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
|
||||||
|
-->
|
91
content/cheat-sheets/wget.md
Normal file
91
content/cheat-sheets/wget.md
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
---
|
||||||
|
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: Some useful wget and curl commands, such as downloading a repository.
|
||||||
|
Lang: en
|
||||||
|
---
|
||||||
|
|
||||||
|
# wget or curl?
|
||||||
|
|
||||||
|
`wget` is a tool to download contents from the command line.
|
||||||
|
In its basic form, it allows downloading a file quite easily just by typing `wget <url>` in your favorite terminal.
|
||||||
|
|
||||||
|
However, a simple look to the [man](https://www.gnu.org/software/wget/manual/wget.html) page directly shows how powerful this tool is.
|
||||||
|
|
||||||
|
Similarily, `curl` is another tool to handle internet requests, however, a look at the [man](https://curl.haxx.se/docs/manpage.html) page shows that it supports a lot more protocols than wget which only handles https(s) and ftp requests.
|
||||||
|
|
||||||
|
On the other hand, wget can follow links (recursively), apply filters on your requests, transform relative links,…
|
||||||
|
Thus, they don't cover the same area of usage (even if the intersection is non-empty).
|
||||||
|
To put it short wget will prove useful whenever you have to download a part of a website while exploring links, while curl can be very handy to tweak single requests in an atomic fashion.
|
||||||
|
Moreover, if you want to analyze web information, firefox and chromium (I didn't try on other browsers) allows exporting requests directly as a curl command from the web inspector, which makes the job less painful than with [netcat](https://en.wikipedia.org/wiki/Netcat).
|
||||||
|
|
||||||
|
To conclude, I'm definitely not a wget/curl poweruser, so there may be very basic stuff here, but as I'm not using those tools on a daily basis.
|
||||||
|
Anyway, as I said, this section is to help me remember these commands to [reduce my google requests](https://degooglisons-internet.org/en/).
|
||||||
|
|
||||||
|
# wget
|
||||||
|
|
||||||
|
## Download a full repository
|
||||||
|
|
||||||
|
Download a repository selecting specific files
|
||||||
|
```sh
|
||||||
|
wget --recursive --no-parent --no-host-directories --cut-dirs=<n> --accept <extension list> <url>
|
||||||
|
```
|
||||||
|
|
||||||
|
Where `<n>` denotes the number of subdirectories to omit from saving. For instance, to download the cover images from this blog at the address “<https://blog.epheme.re/images/covers/>”, you can put:
|
||||||
|
```sh
|
||||||
|
wget -rnpnH --cut-dirs=2 -A jpg https://blog.epheme.re/images/covers/
|
||||||
|
```
|
||||||
|
|
||||||
|
Anyhow, a simpler method, if you don't need the directory structure (for instance in the above example), is to use the `--no-directories/-nd` option. However, the cut-dirs can be useful if you need some architecture information (e.g., if the files are sorted in directories by date or categories)
|
||||||
|
To reject some documents, you can also use the option `-R`, which also accepts regular expressions (which type can be specified using --regex-type)
|
||||||
|
|
||||||
|
## Mirror a website
|
||||||
|
|
||||||
|
Another useful use of wget is just to make a local copy of a website. To do this, the long version is:
|
||||||
|
```sh
|
||||||
|
wget --mirror --no-host-directories --convert-links --adjust-extension --page-requisites --no-parent <url>
|
||||||
|
```
|
||||||
|
|
||||||
|
The name of options are quite straightforward, and the shorten version of it is: `wget -mkEp -np <url>`
|
||||||
|
|
||||||
|
### ignoring robots.txt
|
||||||
|
|
||||||
|
Sometimes, [robots.txt](https://en.wikipedia.org/wiki/Robots_exclusion_standard) forbids you the access to some resources. You can easily bypass this with the option `-e robots=off`.
|
||||||
|
|
||||||
|
### Number of tries
|
||||||
|
|
||||||
|
Occasionally, when the server is busy answering you, wget will try again and again (20 times by default), which can slower your mirroring quite a bit (especially if the timeout is big). You can lower this bound using the… `--tries/-t` option.
|
||||||
|
|
||||||
|
## Finding 404 on a website
|
||||||
|
|
||||||
|
Using the `--spider` option to not actually download files, you can use it as a debugger for your website with `--output-file/-o` to log the result in a file.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
wget --spider -r -nd -o <logfile> <url>
|
||||||
|
```
|
||||||
|
|
||||||
|
The list of broken links is then summarized at the end of the log file.
|
||||||
|
|
||||||
|
# Curl
|
||||||
|
|
||||||
|
## Send a POST request
|
||||||
|
|
||||||
|
My most frequent use of curl is to send POST requests to different kind of API, the syntax is quite simple using the `-F` option:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -F <field1>=<content1> -F <field2>=<content2> <url>
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that to send a file, precede the filename with an `@`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl -F picture=@face.jpg <url>
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- vim: spl=en
|
||||||
|
-->
|
BIN
content/images/covers/erawan-waterfall.jpg
Normal file
BIN
content/images/covers/erawan-waterfall.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 204 KiB |
Loading…
Reference in New Issue
Block a user