1210 votos

¿Conseguir que curl muestre el código de estado HTTP?

Estoy usando curl en la línea de comandos en Linux para emitir peticiones HTTP. Los cuerpos de las respuestas se imprimen en la salida estándar, lo cual está bien, pero no puedo ver en la página de manual cómo hacer que curl imprima el código de estado HTTP de la respuesta (404, 403, etc.). ¿Es esto posible?

1254voto

pvandenberk Puntos 2021

Una forma más específica de imprimir sólo el código de estado HTTP es algo parecido a

curl -s -o /dev/null -w "%{http_code}" http://www.example.org/

Es mucho más fácil trabajar con scripts, ya que no requiere ningún análisis sintáctico :-)

El parámetro -I podría añadirse para mejorar el rendimiento de la carga de respuesta. Esto cambiará la llamada a un HEAD que recuperará sólo los datos generales de la respuesta, sin el cuerpo.

Nota: %{http_code} devuelve en la primera línea de la carga útil HTTP

es decir:

curl -s -o /dev/null -I -w "%{http_code}" http://www.example.org/

801voto

Graham Clark Puntos 9038

Esto debería funcionar para usted si el servidor web es capaz de responder a las peticiones HEAD (esto no realizará una GET solicitud):

curl -I http://www.example.org

Además, para que cURL siga las redirecciones (estados 3xx), añada -L .

393voto

user178013 Puntos 106

Puede imprimir el código de estado, además de todas las cabeceras, haciendo lo siguiente:

curl -i http://example.org

Lo bueno de -i es que funciona con -X POST también.

272voto

Enrico Susatyo Puntos 890

Si quiere ver la cabecera así como el resultado, puede utilizar la opción verbosa:

curl -v http://www.example.org
curl --verbose http://www.example.org

El estado aparecerá en la cabecera. Por ejemplo

< Date: Tue, 04 Nov 2014 19:12:59 GMT
< Content-Type: application/json; charset=utf-8
< Status: 422 Unprocessable Entity

88voto

mat Puntos 5365

Si quieres capturar el código de estado HTTP en una variable, pero seguir redirigiendo el contenido a STDOUT, debes crear dos STDOUT. Puede hacerlo con sustitución del proceso >() y sustitución de comandos $() .

En primer lugar, cree un descriptor de archivo 3 para el STDOUT de su proceso actual con exec 3>&1 .

A continuación, utilice la función -o para redirigir el contenido de la respuesta a un fifo temporal utilizando la sustitución de comandos, y luego dentro de esa sustitución de comandos, redirigir la salida de vuelta a su proceso actual descriptor de archivo STDOUT 3 con -o >(cat >&3) .

Poniendo todo junto en bash 3.2.57(1)-release (estándar para macOS ):

# creates a new file descriptor 3 that redirects to 1 (STDOUT)
exec 3>&1 
# Run curl in a separate command, capturing output of -w "%{http_code}" into HTTP_STATUS
# and sending the content to this command's STDOUT with -o >(cat >&3)
HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example.com')

Tenga en cuenta que esto no funciona en /bin/sh como SamK señaló en los comentarios .

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X