subcadena scripts linea leer fichero extraer ejemplos ejecutar desde consola comando bash http-status-codes

bash - scripts - ejecutar curl en linux



secuencia de comandos para obtener el código de estado HTTP de una lista de URL? (5)

Extendiendo la respuesta ya provista por Phil. Agregarle paralelismo es pan comido en bash si usa xargs para la llamada.

Aquí el código:

xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out ''%{url_effective}: %{http_code}/n'' < url.lst

-n1 : use solo un valor (de la lista) como argumento para la llamada curl

-P10 : mantenga 10 procesos curl vivas en cualquier momento (es decir, 10 conexiones paralelas)

Compruebe el parámetro write_out en el manual de curl para obtener más información que puede extraer usando (tiempos, etc.).

En caso de que ayude a alguien, esta es la llamada que estoy usando actualmente:

xargs -n1 -P 10 curl -o /dev/null --silent --head --write-out ''%{url_effective};%{http_code};%{time_total};%{time_namelookup};%{time_connect};%{size_download};%{speed_download}/n'' < url.lst | tee results.csv

Simplemente genera una gran cantidad de datos en un archivo csv que se puede importar a cualquier herramienta de oficina.

Tengo una lista de URL que debo verificar para ver si aún funcionan o no. Me gustaría escribir un script bash que haga eso por mí.

Solo necesito el código de estado HTTP devuelto, es decir, 200, 404, 500, etc. Nada mas.

EDITAR Tenga en cuenta que hay un problema si la página dice "404 no encontrado" pero devuelve un mensaje de 200 OK. Es un servidor web mal configurado, pero es posible que tenga que considerar este caso.

Para obtener más información al respecto, consulte Comprobar si una URL va a una página que contiene el texto "404"


Use curl para buscar solo el encabezado HTTP (no el archivo completo) y analícelo:

$ curl -I --stderr /dev/null http://www.google.co.uk/index.html | head -1 | cut -d'' '' -f2 200


wget -S -i *file* te mostrará los encabezados de cada URL en un archivo.

Filtra grep para el código de estado específicamente.


Curl tiene una opción específica, - --write-out , para esto:

$ curl -o /dev/null --silent --head --write-out ''%{http_code}/n'' <url> 200

  • -o /dev/null tira la salida habitual
  • --silent tira el medidor de progreso
  • --head hace una solicitud HEAD HTTP, en lugar de GET
  • --write-out ''%{http_code}/n'' imprime el código de estado requerido

Para resumir esto en un guión Bash completo:

#!/bin/bash while read LINE; do curl -o /dev/null --silent --head --write-out "%{http_code} $LINE/n" "$LINE" done < url-list.txt

(Los lectores de Eagle observarán que esto utiliza un proceso curl por URL, que impone penalizaciones por conexión fork y TCP. Sería más rápido si se combinaran varias URL en un solo curl, pero no hay espacio para escribir la repetición monstruosa de opciones que curl requiere para hacer esto).


wget --spider -S "http://url/to/be/checked" 2>&1 | grep "HTTP/" | awk ''{print $2}''

imprime solo el código de estado para usted