2012-09-20 19 views
18

Şu anda bir bash komut dosyası yazıyorum ve curl kullanıyorum. Benim yapmak istediğim yanıtın belirli bir başlığını almak.Curl belirli bir üstbilgi değeri "yazma" değeri

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

Ne yazık ki -w, --write aşımı seçeneği sadece desteklediği değişkenler kümesi varmış gibi görünüyor ve herhangi bir başlığı yazdırmak edemez:

Temelde bu komut çalışmak istiyorum Yanıtın bir parçası. ETag değerini elde etmek için kıvırma çıktısını kendim ayrıştırmam gerekiyor mu yoksa belirli bir üstbilginin değerini yazdırmak için bir yol var mı?

Açıkçası

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

gibi bir şey hüner yok, ama bukle filtresini başlık olmasını hoş olurdu.

cevap

10

"-w" için belirtilen değişkenler doğrudan http başlığına bağlı değildir.

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

Tek bir sed veya awk komutuyla özel bir başlık yazdırabilirsiniz, ancak HTTP başlıkları CRLF satır sonları kullanın: Yani kendi başınıza bunları "ayrıştırmak" zorunda gibi görünüyor.

awk 'BEGIN {FS=": "}/^Content-Type/{print $2}' 
: Değerler boşluklar içeriyorsa size FS=": " ekleyebilir awk ile

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