Passer au contenu principal

Curl

Afin d’éviter les écueils dus aux éventuels problèmes de redirection réseau des ports des machines virtuelles, nous allons utiliser la commande curl pour tester les sites web que nous mettrons en place au cours des TP.

Ceci constitue un petit inventaire des commandes les plus utiles de curl pour notre cas.

Utilisation de base

curl http://example.org

La commande curl télécharge la ressource demandée (qui n’est pas nécessairement une adresse web, car curl est capable de télécharger des ressources d’autres protocoles, comme ftp par exemple) et en affiche le contenu sur la sortie standard, si ce contenu n’est pas un contenu binaire.

Rediriger la ressource vers un fichier

curl http://example.org > fichier.html
curl http://example.org --output fichier.html
curl http://example.org -o fichier.html

Réduire la verbosité de curl

Lorsque la sortie est redirigée vers un fichier, curl affiche une barre de progression donnant certaines indications sur le téléchargement de la ressource (le temps restant, la taille…).

Pour ne pas afficher ces informations, on utilise l’option --silent ou son abbréviation -s.

curl --silent http://example.org -o fichier.html
curl -s http://example.org -o fichier.html

Faire autre chose qu’un GET

Pour utiliser une autre méthode HTTP que GET, on utilise l’option --request ou son abbréviation -X.

curl --request POST http://example.org
curl -X POST http://example.org

Faire une requête HEAD

Si on tente de faire une requête HEAD avec l’option --request, curl affichera un message d’erreur :

Warning: Setting custom HTTP method to HEAD with -X/--request may not work the
Warning: way you want. Consider using -I/--head instead.

Il convient d’utiliser l’option --head ou son abbréviation -I :

curl --head http://example.org
curl -I http://example.org

Pour faire une requête avec authentification HTTP

On spécifie l’identifiant et le mot de passe avec l’option --user ou son abbréviation -u, en les séparant par un caractère :.

curl --user login:password http://example.org
curl -u login:password http://example.org

Forcer la connexion en IPv6 ou en IPv4

On utilise pour cela les options -6 et -4.

curl -6 http://example.org
curl -4 http://example.org

Utilisation avancée

Forcer la connexion sur une autre adresse IP

Il est possible de dire à curl d’utiliser une adresse IP particulière au lieu de la véritable adresse IP d’un domaine. Il faut voir cela comme une alternative à la manipulation du fichier /etc/hosts.

curl --resolve example.org:80:127.0.0.1 http://example.org
curl --resolve "example.org:80:[::1]" http://example.org

La syntaxe de l’option est host:port:addr. Le port est celui qui sera utilisé par le protocole. Spécifier le port 80 pour le protocole https serait inutile : il faut dans ce cas utiliser le port 443.

Forcer la connexion sur une autre adresse IP et un autre port

On utilise pour cela l’option --connect-to, relativement similaire à l’option --resolve. La syntaxe de l’option est host1:port1:host2:port2

curl --connect-to example.org:80:127.0.0.1:8080 http://example.org
curl --connect-to "example.org:80:[::1]:8080" http://example.org

Forcer la connexion depuis une certaine interface réseau

On utilise pour cela l’option --interface suivi du nom d’une interface, d’une adresse IP ou d’un nom d’hôte.

curl --interface wlo1 http://example.org
curl --interface 203.0.113.42 http://example.org
curl --interface example.com http://example.org

Ne pas vérifier la sécurité du certificat du site

Que ce soit parce qu’un certificat est expiré ou parce qu’on utilise un certificat autosigné, on peut avoir besoin que curl effectue bien la requête sans se préoccuper de la validité du certificat utilisé par le site. On utilise alors l’option --insecure ou son abbréviation -k.

curl --insecure https://example.org
curl -k https://example.org

Utiliser un fichier d’autorités de certification spécifique

Si on utilise, par exemple, un certificat autosigné, ou signé par une autorité de certification (AC) personnelle, et qu’on souhaite s’assurer que le certtificat utilisé par le site est bien valide, on peut donner à curl un fichier contenant le certificat public de l’AC (il est possible d’y mettre plusieurs certificats) au format PEM. On utilise l’option --cacert.

curl --cacert fichier_AC.pem https://example.org

On peut aussi utiliser l’option --capath dont l’argument est un dossier contenant des fichiers de certificats d’AC.

curl --capath ~/ACs https://example.org