Siempre estaba asumiendo que cuando rizo consiguió una respuesta HTTP 500 se devuelve un código de salida que significó el fracaso (! = 0), pero que parece ser no el caso.
¿Hay alguna manera de hacer que cURL falle con un código de salida diferente de 0 si el código de estado HTTP no es 200? Sé que puedo usar, -w "%{http_code}"
pero eso lo pone en STDOUT, no como el código de salida (además, también estoy interesado en capturar la salida, que no quiero redirigir a un archivo, sino a la pantalla).
curl -f -L
consulte esta pregunta para obtener detalles sobre qué-L
hace.Si solo desea mostrar el contenido de la página curvada, puede hacer esto:
Esto escribe el contenido de la página en STDERR mientras escribe el código de estado HTTP en STDOUT, por lo que puede asignarse a la variable STATUSCODE .
fuente
0
código de no estado del script?if [ "$statuscode" -ne 200 ]; then exit "$statuscode"; fi
?{ code=$(curl ... as above ...); } 2>&1
el truco es{ ... } 2>&1
que permite redirigir, sin generar un shell diferente como lo( ... )
haría.Pude hacerlo usando una combinación de banderas:
curl --silent --show-error --fail URL
--silent oculta el progreso y el error
--show-error muestra el mensaje de error oculto por
--silent
--fail devuelve un código de salida> 0 cuando falla la solicitud
fuente
--silent --show-error --fail
funciona igual que solo-f/--fail
.--fail
devuelve el código de salida22
, como se documenta .Sí, hay una manera de hacerlo, pero está lejos de ser obvio, ya que involucra 3 opciones de rizo:
Esto asegura que el éxito (0) ocurre solo cuando curl end-us con el
2xx
código de retorno final y esostdout
obtiene el cuerpo y que cualquier error se mostrará a stderr.Tenga en cuenta que la documentación de curl puede confundirlo un poco porque menciona que --fail podría tener éxito para algunos códigos 401. Basado en pruebas que no son ciertas, al menos no cuando se usa con --show-error al mismo tiempo.
Hasta ahora no pude encontrar ningún caso en el que curl devuelva el éxito cuando no fue un éxito http con estas opciones.
fuente