Bunu başarma yolum :
Her ikisini de (başlık ve gövde) elde etmek için genellikle şu şekilde gerçekleştiririm curl -D- <url>
:
$ 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"]}
Bu başlıkları (dökümü olacak -D
Stdout'a) ( -
için) (Bak --dump-header
içinde adam kıvrılma ).
IMHO da bu bağlamda çok kullanışlıdır:
Bu json verilerini (örn. Bazı dinlenme API'lerinden) biçimlendirmek için genellikle jq kullanırım . Ancak jq bir HTTP başlığı beklemediğinden, işin püf noktası kullanarak başlıkları stderr'e yazdırmaktır -D/dev/stderr
. Bu sefer -sS
ilerleme ölçeri bastırmak için (--silent, --show-errors) kullandığımızı unutmayın (çünkü bir boruya yazıyoruz).
$ 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"
]
}
Sanırım bu, başlıkları konsola yazdırmak (hızlı inceleme için) ancak gövdeyi bir dosyaya yeniden yönlendirmek istiyorsanız (örneğin, terminalinizi karıştırmamak için bir tür ikili dosya olduğunda) kullanışlı olabilir:
$ 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
Dikkat edin: Bu aynı DEĞİLDİR curl -I <url>
! Bir -I
istek yerine bir HEAD
istek gerçekleştireceği gibi GET
(Look --head
in man curl . Evet: Çoğu HTTP sunucusu için bu aynı sonucu verecektir. Ancak, HEAD
isteği hiç uygulamayan birçok iş uygulaması biliyorum;