Utilizo curl para obtener encabezados http para encontrar el código de estado http y también devolver la respuesta. Obtengo los encabezados http con el comando
curl -I http://localhost
Para obtener la respuesta, uso el comando
curl http://localhost
Tan pronto como uso la bandera -I, obtengo solo los encabezados y la respuesta ya no está allí. ¿Hay alguna manera de obtener tanto la respuesta http como los encabezados / código de estado http en un solo comando?
Respuestas:
Pude obtener una solución mirando el doc curl que especifica usar
-
para que la salida obtenga la salida a la salida estándar.Para obtener la respuesta con solo el código de retorno http, podría hacer
fuente
-i
. O tal vez-v
si también desea información adicional.-o -I
termina creando un archivo llamado literalmente '-I
' en el CWD. ¿Alguien más puede ver esto? La solución para eso es-o/dev/null -I
el modo detallado te dirá todo
fuente
Utilizo este comando para imprimir el código de estado sin ningún otro resultado. Además, solo realizará una solicitud HEAD y seguirá la redirección (respectivamente
-I
y-L
).Esto hace que sea muy fácil verificar el código de estado en un script de salud:
fuente
curl -o -I -L -s -w "%{http_code}" http://localhost
, se crea un archivo llamado-I
, para evitar esto, agregué un lugar para la salida del archivo implícita-o
, a saber/dev/null
:curl -o /dev/null -I -L -s -w "%{http_code}" http://localhost
Encontré esta pregunta porque quería TANTO la respuesta como el contenido para agregar un manejo de errores para el usuario.
Puede imprimir el código de estado HTTP en std y escribir el contenido en otro archivo.
Esto le permite usar la lógica para decidir si vale la pena procesar la respuesta.
fuente
La
-i
opción es la que tú quieras:Alternativamente, puede utilizar la opción detallada:
fuente
He usado esto:
Para obtener el estado HTTP
Para obtener el cuerpo de respuesta he usado esto
fuente
Este comando
obtendrá el cuerpo y el estado separados por comas; puedes dividirlos para sacarlos.
Puede cambiar el delimitador como desee.
fuente
Para uso programático, uso lo siguiente:
Muestra la siguiente salida:
fuente
Esta es una forma de recuperar el cuerpo "Y" el código de estado y formatearlo a un json adecuado o al formato que funcione para usted. Algunos pueden argumentar que es el uso incorrecto de la opción de formato de escritura, pero esto me funciona cuando necesito tanto el código de estado como el de cuerpo en mis scripts para verificar el código de estado y retransmitir las respuestas del servidor.
ejecute el código anterior y debería obtener un json en este formato:
con la opción -w write format, dado que stderr se imprime primero, puede formatear su salida con var http_code y colocar el cuerpo de la respuesta en un valor (body) y hacer un seguimiento del adjunto usando var stdout. Luego, redirija su salida stderr a stdout y podrá combinar tanto http_code como el cuerpo de respuesta en una salida ordenada
fuente
curl: unknown --write-out variable: 'stderr'
ycurl: unknown --write-out variable: 'stdout'
Mi forma de lograr esto :
Para obtener ambos (encabezado y cuerpo), generalmente realizo un
curl -D- <url>
como en:Esto volcará los encabezados (
-D
) a stdout (-
) (busque--dump-header
en man curl ).En mi humilde opinión también es muy útil en este contexto:
A menudo uso jq para formatear esos datos json (por ejemplo, de algunas API de descanso). Pero como jq no espera un encabezado HTTP, el truco consiste en imprimir encabezados en stderr usando
-D/dev/stderr
. Tenga en cuenta que esta vez también usamos-sS
(--silent, --show-errors) para suprimir el medidor de progreso (porque escribimos en una tubería).Supongo que esto también puede ser útil si desea imprimir encabezados (para una inspección rápida) en la consola pero redirigir el cuerpo a un archivo (por ejemplo, cuando es algún tipo de binario para no estropear su terminal):
Tenga en cuenta: ¡Esto NO es lo mismo que
curl -I <url>
! Como-I
realizará unaHEAD
solicitud y no unaGET
solicitud (busque--head
en man curl . Sí: para la mayoría de los servidores HTTP, esto producirá el mismo resultado. Pero conozco muchas aplicaciones comerciales que no implementan laHEAD
solicitud en absoluto ;-Pfuente
fuente