cURL suprime el cuerpo de respuesta

110

¿Es posible instruir a cURL para suprimir la salida del cuerpo de respuesta?

En mi caso, el cuerpo de la respuesta es una página HTML, que desborda el búfer CLI, lo que dificulta encontrar la información relevante. Quiero examinar las otras partes de la salida, como el código de respuesta HTTP, los encabezados, etc., todo excepto el HTML real.

BaltoStar
fuente

Respuestas:

117

Puede usar el -oconmutador y el nullpseudoarchivo:

Unix

curl -s -o /dev/null -v http://google.com

Ventanas

curl -s -o nul -v http://google.com
Gilles Quenot
fuente
1
... si está en Unix ;-) Para Windows es posible que desee utilizar nul. Aquí está el enlace a los documentos, tal vez BaltoStar siente la necesidad de leer antes de preguntar la próxima vez ;-) curl.haxx.se/docs/manpage.html
Marged
3
De nada. Pero es "nul", "null" creará un archivo con ese nombre
Marcado el
1
de hecho, leí la página de manual antes de publicar y lo intenté, -s -o nulpero en mi máquina de Windows sale curl -s -o nul -v http://{internal-host}/{internal-uri}todo el html de la página; lo intenté curl -s -o nul -v http://google.comy suprime la salida como se esperaba, así que no entiendo por qué esto no funciona para mi sitio interno
BaltoStar
-osolo especifica una salida de URL: si tiene varias URL, solo descartará la primera :(
Simon Buchan
1
Se basa en no portátiles NULy /dev/null. Usar -sIXGETes una mejor opción en mi opinión.
binki
45

Esta es una forma de suprimir todos los encabezados y la salida curl, con la opción de seguir mostrando errores si ocurren. Útil para trabajos cron o pruebas automatizadas.

Unix

Para suprimir toda la salida:

curl --silent --output /dev/null http://example.com

Para suprimir la salida pero aún mostrar errores si ocurren:

curl --silent --output /dev/null --show-error --fail http://example.com

Ventanas

Para suprimir toda la salida:

curl --silent --output nul http://example.com

Para suprimir la salida pero aún mostrar errores si ocurren:

curl --silent --output nul --show-error --fail http://example.com

Parámetros explicados

--silentsuprime las estadísticas de descarga en curso (pero seguirá mostrando la salida HTML)
--output /dev/nulloculta la salida correcta
--show-errormuestra errores, incluso cuando el silentmodo está habilitado
--failgenerará un error si la respuesta HTTP es un código de error (404, 500, etc.) en lugar de simplemente DNS / Errores de TCP.


ACTUALIZACIÓN: Me doy cuenta de que el autor original quería inspeccionar los encabezados y el código de respuesta de una solicitud en lugar de silenciar todo . Consulte la respuesta de samael para obtener detalles sobre cómo hacer eso.

Simon East
fuente
2
Se basa en no portátiles NULy /dev/null. Usar -sIXGETes una mejor opción en mi opinión.
binki
1
Gracias por el comentario @binki, en realidad hacen cosas diferentes. También me di cuenta de que el OP quería inspeccionar los encabezados que no se muestran en mi solución. Actualicé mi respuesta para reflejar eso.
Simon East
1
Supongo que al releer la publicación del OP no dijeron que solo querían ver los encabezados. En realidad, podrían haber estado buscando curl -vo/dev/null/ curl -voNUL… y no sé si hay una variante portátil de eso, hrm… ;-).
binki
¿Hay un comando corto para --fail? Creo que -sS es lo que necesitamos tanto para --silent como para --show-error
Freedo
Sí, hay: curl -Ssfo /dev/null url. Pero sea amable con los futuros mantenedores.
Amit Naidu
29

Cuando desee mostrar encabezados pero ocultar el cuerpo de la respuesta, querrá usar:

curl -sIXGET http://somedomain.com/your/url

Lo había estado usando curl -I http://somedomain.com/your/urlsolo para mostrar encabezados de respuesta. Sin embargo, el problema con eso es que realiza la solicitud utilizando el HEADmétodo, lo cual no es bueno cuando desea probar una llamada API que solo responde a una GETsolicitud. Para esto es -X GET, cambia la solicitud a GET.

Entonces, en resumen:

-soculta las barras de progreso de la salida (especialmente útil cuando se conecta a otro programa)
-Imuestra los encabezados (pero hace una HEADsolicitud)
-XGETconvierte la solicitud de nuevo en una GETsolicitud

ver: http://www.woolie.co.uk/article/curl-full-get-request-dropping-body/

samael
fuente
2
Eso es realmente complicado; curl -ihace exactamente lo mismo.
bfontaine
4
no, -iincluye el encabezado HTTP en la salida y en el cuerpo. Intentalo. curl -i http://google.comno es lo mismo quecurl -IXGET http://google.com
samael
Para mis propósitos (y los OP) curl -I urles suficiente y tiene el mismo efecto. Solo necesitaba verificar si la URL respondía. Esta pregunta también trataba simplemente de suprimir el cuerpo, lo que HEADhace bien.
Amit Naidu