2012-09-20 12 views
18

Actualmente estoy escribiendo un script bash y estoy usando curl. Lo que quiero hacer es obtener un encabezado específico de una respuesta.Curl "write out" value of specific header

Básicamente quiero que este comando funcione:

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

Por desgracia, parece como si el -w, --write opción de salida sólo tiene un conjunto de variables que apoya y no se puede imprimir cualquier encabezado que es parte de la respuesta. ¿Necesito analizar el resultado de curl para obtener el valor ETag o hay alguna manera de hacer que curl imprima el valor de un encabezado específico?

Obviamente algo así como

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

hace el truco, pero sería mejor tener filtro de rizo de la cabecera.

Respuesta

10

Las variables especificadas para "-w" no están conectadas directamente al encabezado http. Así que parece que hay que "analizar" por su cuenta:

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

puede imprimir un encabezado específico con un único comando sed o awk, pero las cabeceras HTTP utiliza los finales de línea CRLF.

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

Con awk puede agregar FS=": " si los valores contienen espacios:

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