Mój sposób na osiągnięcie tego :
Aby uzyskać oba (nagłówek i treść), zwykle wykonuję curl -D- <url>
jak w:
$ 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"]}
Spowoduje to zrzucenie nagłówków ( -D
) do stdout ( -
) (szukaj --dump-header
w man curl ).
IMHO również bardzo przydatne w tym kontekście:
Często używam jq, aby sformatować dane json (np. Z niektórych pozostałych API). Ale ponieważ jq nie oczekuje nagłówka HTTP, sztuczka polega na wydrukowaniu nagłówków na stderr za pomocą -D/dev/stderr
. Zauważ, że tym razem używamy również -sS
(--silent, --show-errors) do pomijania wskaźnika postępu (ponieważ piszemy do potoku).
$ 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"
]
}
Myślę, że może to być również przydatne, jeśli chcesz wydrukować nagłówki (w celu szybkiej kontroli) na konsoli, ale przekierować treść do pliku (np. Gdy jest to jakiś plik binarny, aby nie zepsuć terminalu):
$ 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
Uwaga: to NIE to samo, co curl -I <url>
! Jak -I
wykona HEAD
żądanie, a nie GET
żądanie (szukaj --head
w man curl . Tak: dla większości serwerów HTTP da to ten sam wynik. Ale znam wiele aplikacji biznesowych, które w ogóle nie implementują HEAD
żądania ;-P