2012-09-20 6 views
18

Ich schreibe gerade ein Bash-Skript und ich benutze curl. Ich möchte einen bestimmten Header einer Antwort erhalten.Curl "write out" Wert der spezifischen Header

Grundsätzlich mag ich diesen Befehl arbeiten:

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

Leider scheint es, als ob die -w Option --write-out nur eine Reihe von Variablen hat es unterstützt und kann keinen Header drucken, das ist Teil der Antwort. Muss ich die Curl-Ausgabe selbst analysieren, um den ETag-Wert zu erhalten, oder gibt es eine Möglichkeit, den Wert einer bestimmten Kopfzeile mit curl zu drucken?

Offensichtlich etwas wie

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

funktioniert der Trick, aber es wäre schöner, curl Filter den Header zu haben.

Antwort

10

Die für "-w" angegebenen Variablen sind nicht direkt mit dem http-Header verbunden. So sieht es aus wie Sie zu „analysieren“ haben sie auf eigene Faust:

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

Sie auf einen speziellen Header mit einem einzigen sed oder awk Befehl drucken können, aber HTTP-Header CRLF Zeilenenden verwenden.

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

Mit awk Sie FS=": " hinzufügen können, wenn die Werte Leerzeichen enthalten:

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