Curl: ajout d'astuces et de précisions
This commit is contained in:
parent
a06a0cf22d
commit
046b049030
102
HowtocURL.md
102
HowtocURL.md
|
@ -10,45 +10,53 @@ categories: tips
|
||||||
|
|
||||||
## Utilisation de base
|
## Utilisation de base
|
||||||
|
|
||||||
|
Récupérer et afficher – sur la sortie standard – le contenu d'une ressource :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
$ curl https://www.example.com
|
$ 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/
|
$ curl -k https://www.example.com/
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Suivre les redirect 301 :
|
Suivre les redirections (`-L` ou `--location`) :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
$ curl -L http://www.example.com
|
$ 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
|
$ 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
|
## Outrepasser le nom de domaine
|
||||||
|
|
||||||
Avec cette astuce, inutile de modifier `/etc/hosts`, ce qui est très pratique.
|
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'
|
$ 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
|
$ 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
|
## Authentification
|
||||||
|
|
||||||
|
Option `-u` ou `--user` :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
$ curl -u username:password https://www.example.com
|
$ 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/
|
$ 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
|
## Divers
|
||||||
|
|
||||||
Afficher uniquement le header :
|
### Affichage de la réponse
|
||||||
|
|
||||||
|
Afficher uniquement les en-têtes (`-I` ou `--head`) :
|
||||||
|
|
||||||
~~~
|
~~~
|
||||||
$ curl -I www.example.com
|
$ 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
|
$ 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'
|
$ 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
|
$ curl -z 17-Mar-17 www.example.com
|
||||||
|
|
Loading…
Reference in a new issue