2012-09-20 9 views
18

Attualmente sto scrivendo uno script di bash e sto usando arricciatura. Quello che voglio fare è ottenere una specifica intestazione di una risposta.Curl "write out" valore di intestazione specifica

Fondamentalmente voglio questo comando per lavorare:

curl -I -w "%{etag}" "server/some/resource" 

Purtroppo sembra come se l'-w, opzione di --write-out ha solo un insieme di variabili che supporta e non si può stampare qualsiasi intestazione che è parte della risposta. Devo analizzare l'output di arricciatura per ottenere il valore di ETag o c'è un modo per fare in modo che il ricciolo stampi il valore di una specifica intestazione?

Ovviamente qualcosa come

curl -sSI "server/some/resource" | grep 'ETag:' | sed -r 's/.*"(.*)".*/\1/' 

fa il trucco, ma sarebbe bello avere il filtro ricciolo l'intestazione.

risposta

10

Le variabili specificate per "-w" non sono direttamente collegate all'intestazione http. così sembra che si deve "analizzare" loro da soli:

curl -I "server/some/resource" | grep -Fi etag 
15

È possibile stampare un'intestazione specifica con un singolo comando sed o awk, ma le intestazioni HTTP utilizza fine riga CRLF.

curl -sI stackoverflow.com | tr -d '\r' | sed -En 's/^Content-Type: (.*)/\1/p' 

Con awk è possibile aggiungere FS=": " se i valori contengono spazi:

awk 'BEGIN {FS=": "}/^Content-Type/{print $2}'