Il mio modo per ottenere questo risultato :
Per ottenere entrambi (intestazione e corpo), di solito eseguo un curl -D- <url>come in:
$ curl -D- http://localhost:1234/foo
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 20:59:21 GMT
{"data":["out.csv"]}
Questo scaricherà le intestazioni ( -D) su stdout ( -) (Cerca --dump-headerin man curl ).
IMHO anche molto utile in questo contesto:
Uso spesso jq per ottenere la formattazione dei dati json (ad esempio da alcune API rest). Ma poiché jq non si aspetta un'intestazione HTTP, il trucco è stampare le intestazioni su stderr usando -D/dev/stderr. Nota che questa volta usiamo anche -sS(--silent, --show-errors) per sopprimere l'indicatore di avanzamento (perché scriviamo su una pipe).
$ curl -sSD/dev/stderr http://localhost:1231/foo | jq .
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:08:22 GMT
{
"data": [
"out.csv"
]
}
Immagino che questo possa essere utile anche se desideri stampare le intestazioni (per un'ispezione rapida) sulla console ma reindirizzare il corpo a un file (ad esempio, quando è una specie di binario per non rovinare il tuo terminale):
$ curl -sSD/dev/stderr http://localhost:1231 > /dev/null
HTTP/1.1 200 OK
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Date: Wed, 29 Jul 2020 21:20:02 GMT
Attenzione: NON è la stessa cosa di curl -I <url>! Come -Ieseguirà una HEADrichiesta e non una GETrichiesta (cerca --headin man curl . Sì: per la maggior parte dei server HTTP questo produrrà lo stesso risultato. Ma conosco molte applicazioni aziendali che non implementano affatto la HEADrichiesta ;-P