Mi forma de lograr esto :
Para obtener ambos (encabezado y cuerpo), generalmente realizo un curl -D- <url>
como en:
$ 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"]}
Esto volcará los encabezados ( -D
) a stdout ( -
) (busque --dump-header
en man curl ).
En mi humilde opinión también es muy útil en este contexto:
A menudo uso jq para formatear esos datos json (por ejemplo, de algunas API de descanso). Pero como jq no espera un encabezado HTTP, el truco consiste en imprimir encabezados en stderr usando -D/dev/stderr
. Tenga en cuenta que esta vez también usamos -sS
(--silent, --show-errors) para suprimir el medidor de progreso (porque escribimos en una tubería).
$ 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"
]
}
Supongo que esto también puede ser útil si desea imprimir encabezados (para una inspección rápida) en la consola pero redirigir el cuerpo a un archivo (por ejemplo, cuando es algún tipo de binario para no estropear su terminal):
$ 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
Tenga en cuenta: ¡Esto NO es lo mismo que curl -I <url>
! Como -I
realizará una HEAD
solicitud y no una GET
solicitud (busque --head
en man curl . Sí: para la mayoría de los servidores HTTP, esto producirá el mismo resultado. Pero conozco muchas aplicaciones comerciales que no implementan la HEAD
solicitud en absoluto ;-P