solucionar solucion significa que error como bad scripting curl wget

scripting - solucion - ¿Hay una opción curl/wget que diga que no se guardan los archivos tras los errores http?



error 520 cloudflare solucion (6)

Quiero descargar muchas URL en un script, pero no quiero guardar las que generan errores HTTP.

Por lo que puedo decir de las páginas man, ni curl o wget proporcionan tal funcionalidad. ¿Alguien sabe acerca de otro descargador que lo hace?


Para hacer esto con wget:

en Unix puedes hacer:

wget -O /dev/null example.com

mientras que en Windows el equivalente es:

wget -O NUL example.com



Un trazador de líneas que acabo de configurar para este mismo propósito:

(funciona solo con un solo archivo, puede ser útil para otros)

A=$$; ( wget -q "http://foo.com/pipo.txt" -O $A.d && mv $A.d pipo.txt ) || (rm $A.d; echo "Removing temp file")

Esto intentará descargar el archivo desde el Host remoto. Si hay un error, el archivo no se guarda. En todos los demás casos, se mantiene y renombra.


Creo que la opción -f para curl hace lo que quieres:

-f , --fail

(HTTP) Falló silenciosamente (sin salida) en los errores del servidor. Esto se hace principalmente para habilitar mejor los scripts, etc., para tratar mejor los intentos fallidos. En casos normales, cuando un servidor HTTP no puede entregar un documento, devuelve un documento HTML que así lo indica (que a menudo también describe por qué y más). Este indicador evitará que curl lo genere y devuelva el error 22. [...]

Sin embargo, si la respuesta fue en realidad una redirección 301 o 302, aún se guardará, incluso si su destino daría lugar a un error:

$ curl -fO http://google.com/aoeu $ cat aoeu <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>301 Moved</TITLE></HEAD><BODY> <H1>301 Moved</H1> The document has moved <A HREF="http://www.google.com/aoeu">here</A>. </BODY></HTML>

Para seguir el redireccionamiento a su callejón sin salida, también da la opción -L :

-L , --location

(HTTP / HTTPS) Si el servidor informa que la página solicitada se ha movido a una ubicación diferente (indicada con un encabezado Location: y un código de respuesta 3XX), esta opción hará que curl reforme la solicitud en el nuevo lugar. [...]


Tengo una solución para proponer, descarga el archivo pero también lo elimina si su tamaño es 0 (lo que sucede si se produce un 404).

wget -O <filename> <url/to/file> if [[ (du <filename> | cut -f 1) == 0 ]]; then rm <filename>; fi;

Funciona para zsh pero puedes adaptarlo para otras conchas.

Pero solo lo guarda en primer lugar si proporciona la opción -O


Hilo antiguo ... aterrizó aquí buscando una solución ... terminó escribiendo un código de shell para hacerlo.

if [ `curl -s -w "%{http_code}" --compress -o /tmp/something / http://example.com/my/url/` = "200" ]; then echo "yay"; cp /tmp/something /path/to/destination/filename fi

Esto descargará la salida a un archivo tmp, y creará / sobrescribirá el archivo de salida solo si el estado fue 200. Mi uso es un poco diferente ... en mi caso, la salida tarda> 10 segundos en generar ... y no quería el destino archivo para permanecer en blanco durante ese tiempo.