http - wget method post
Obtener salida de página con curl--fail (3)
En primer lugar, el valor máximo para el código de error (o código de salida) es 255
. Aquí está la reference .
Además, el --fail
no le permitirá hacer lo que está buscando. Sin embargo, puede usar formas alternativas (escribir un guión de shell) para manejar el escenario, ¡pero no está seguro si será efectivo o no para usted!
http_code=$(curl -s -o out.html -w ''%{http_code}'' http://www.google.com/linux;)
if [[ $http_code -eq 200 ]]; then
exit 0
fi
## decide which status you want to return for 404 or 500
exit 204
Ahora haz el $?
y obtendrás el código de salida desde allí.
Encontrará la respuesta html dentro del archivo out.html
.
También puede pasar la url a la secuencia de comandos como argumento de línea de comandos. Mira aquí .
Llamando curl sin parámetros, obtengo el resultado de la página, incluso con un código de estado http = 404:
$ curl http://www.google.com/linux;
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/errors/logo_sm_2.png) no-repeat}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/errors/logo_sm_2_hr.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/errors/logo_sm_2_hr.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:55px;width:150px}
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>That’s an error.</ins>
<p>The requested URL <code>/linux</code> was not found on this server. <ins>That’s all we know.</ins>
$ echo $?;
0
El código de estado es 0.
Llamarlo con --fail no mostrará la salida:
$ curl --fail http://www.google.com/linux;
curl: (22) The requested URL returned error: 404 Not Found
$ echo $?;
22
El código de estado ahora es 22 ...
Me gustaría obtener la salida incluso cuando el estado http = 404, 500 (como la primera ejecución de curl) y, al mismo tiempo, obtenga un error de sistema diferente (como en la ejecución del segundo curl, $? = 22). ¿Es posible con curl? Si no es así, ¿cómo podría lograr esto con otra herramienta (esta herramienta debe aceptar subir archivos y publicar datos! Wget no parece ser una alternativa ...)
Gracias.
Encontré una solución porque wget no era adecuada para enviar datos multipart / form-data
curl -o - -w "/n%{http_code}/n" http://httpbin.org/status/418 | tee >(tail -n 1 | cmp <(echo 2xx) - ) | tee >(grep "char 2"; echo $? > status-code) && grep 0 status-code
Explicación
-o - -w "/n%{http_code}/n"
- imprime en stdout (en realidad se canaliza al siguiente comando) con el código de estado al final
tee
- output se canalizará al siguiente comando y se imprimirá adicionalmente en stdout
tail -n 1
- extraer el código de estado de la última línea
cmp <(echo 2xx) -
compare el código de estado, primero solo char
grep "char 2"
- si el primer carácter debe ser 2, de lo contrario, fallará
En un script de shell también puede hacer una mejor comparación (actualmente solo permite 2xx, por lo que redireccionar como 300 se manejan como un error con cmp
como se usa arriba)
Lamentablemente no es posible con curl. Pero puedes hacer esto con wget.
$ wget --content-on-error -qO- http://httpbin.org/status/418
-=[ teapot ]=-
_...._
.'' _ _ `.
| ."` ^ `". _,
/_;`"---"`|//
| ;/
/_ _/
`"""`
$ echo $?
8