wget/curl

This commit is contained in:
Fabrice Mouhartem 2022-07-25 13:46:33 +02:00
parent d719cb39ca
commit 46b70b9678
3 changed files with 219 additions and 0 deletions

View 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>
```
`<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 dutiliser loption
`--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 dattente 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 dhistorique.
## `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
-->

View 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
-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB