Curl: ajout d'astuces et de précisions

This commit is contained in:
Jérémy Lecour 2017-03-27 14:49:59 +02:00 committed by Jérémy Lecour
parent a06a0cf22d
commit 046b049030

View file

@ -10,45 +10,53 @@ categories: tips
## Utilisation de base
Récupérer et afficher sur la sortie standard le contenu d'une ressource :
~~~
$ curl https://www.example.com
~~~
Enregistrer en local :
Enregistrer la ressource dans un fichier portant le même nom (`-O ou `--remote-name`) :
~~~
$ curl -O https://www.example.com/
$ curl -O https://www.example.com/page.html
~~~
Ignorer le certificat :
Ne pas vérifier la validité du certificat (`-k` ou `--insecure`) :
~~~
$ curl -k https://www.example.com/
~~~
Suivre les redirect 301 :
Suivre les redirections (`-L` ou `--location`) :
~~~
$ curl -L http://www.example.com
~~~
Spécifier la méthode (par défaut GET) POST/PUT/DELETE :
Spécifier la méthode (par défaut GET) POST/PUT/DELETE (`-X` ou `--request`) :
~~~
$ curl -X POST https://www.example.com
~~~
Spécifier un en-tête HTTP (`-H` ou `--header`) :
~~~
$ curl http://www.example.com -H 'Accept: text/plain'
~~~
## Outrepasser le nom de domaine
Avec cette astuce, inutile de modifier `/etc/hosts`, ce qui est très pratique.
En HTTP classique :
Avec un en-tête `Host` forcé :
~~~
$ curl http://192.0.2.1:8080/foo/bar -H 'Host: www.example.com'
~~~
En HTTPS (SNI) :
Avec une résolution forcée (`--resolve`, à partir de 7.21.3) :
~~~
$ curl --resolve www.example.com:443:192.0.2.1 https://www.example.com/foo/bar
@ -56,6 +64,8 @@ $ curl --resolve www.example.com:443:192.0.2.1 https://www.example.com/foo/bar
## Authentification
Option `-u` ou `--user` :
~~~
$ curl -u username:password https://www.example.com
~~~
@ -90,26 +100,96 @@ $ curl -u ftpuser:ftppass -T fichier ftp://ftp.example.com/
$ curl -u ftpuser:ftppass -T "{fichier1,fichier2}" ftp://ftp.example.com/
~~~
## API REST
Pour tester des interactions avec une API REST, on peut facilement envoyer des structures de données.
En direct :
~~~
$ curl -XPUT 'http://localhost:9200/_snapshot/foo' -d '{
"type": "fs",
"settings": {
"location": "/home/backup-elasticsearch",
"compress": true
}
}'
~~~
Via un fichier :
~~~
$ curl -XPUT 'http://localhost:9200/_snapshot/foo' -d @/path/to/file
~~~
## Divers
Afficher uniquement le header :
### Affichage de la réponse
Afficher uniquement les en-têtes (`-I` ou `--head`) :
~~~
$ curl -I www.example.com
~~~
Afficher le header et le contenu :
Afficher les en-têtes et le contenu (`-i` ou `--include`) :
~~~
$ curl -i www.example.com
~~~
Obtenir le contenu gzipé :
### En-têtes de requête et de réponse
À plaver dans un script, pour faciliter son utilisation.
*Note*: Ce script permet de ne pas modifier le verbe HTTP employé. En effet, une requête "HEAD" peut-être traitée différemment d'un "GET" par certains services. Il peut être combiné avec toutes les options de Curl.
~~~{.bash}
#!/bin/sh
#
# https://github.com/rtomayko/dotfiles/blob/rtomayko/bin/headers
curl -sv "$@" 2>&1 >/dev/null |
grep -v "^\*" |
grep -v "^}" |
cut -c3-
~~~
~~~
$ ~/bin/headers http://www.example.com
GET / HTTP/1.1
User-Agent: curl/7.38.0
Host: www.example.com
Accept: */*
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html
Date: Mon, 27 Mar 2017 12:39:35 GMT
Etag: "359670651"
Expires: Mon, 03 Apr 2017 12:39:35 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (lga/13D5)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1270
[data not shown]
~~~
### Version compressée
Obtenir le contenu gzipé (avec un en-tête forcé) :
~~~
$ curl www.example.com -H 'Accept-Encoding:gzip, deflate'
~~~
Récupérer le contenu seulement si celui-ci a été modifié après le 17 Mers 2017 :
### Contrainte de date de modification de la ressource
Récupérer le contenu seulement si celui-ci a été modifié après le 17 Mars 2017 (`-I` ou `--head`) :
~~~
$ curl -z 17-Mar-17 www.example.com