Ciertamente hay otra manera, pero esto requiere comprender lo que realmente sucede cuando se realiza una solicitud a través de Internet. Cuando visita una página en su navegador web, los datos se transfieren utilizando un protocolo llamado HTTP (sí, es por eso que a menudo verá http://
al comienzo de las URL).
HTTP es un protocolo basado en texto. La información se intercambia entre el cliente y el servidor mediante el envío de encabezados seguidos del cuerpo de la solicitud. Los encabezados contienen mucha información de estado sobre la solicitud y la información que se transfiere. El encabezado que le interesará para ayudarlo con su problema no es realmente un encabezado, es la primera línea transferida y contiene un número llamado código de estado. Este número tiene 3 dígitos y transmite información de estado. Si una solicitud fue exitosa, el resultado suele ser 200 (no siempre, hay excepciones).
Una cosa es segura: si el archivo que ha solicitado no existe en el servidor web, el servidor debe responder con un código de estado de 404. Esto indica que no se pudo encontrar el recurso. (Para los curiosos, aquí hay una lista de códigos de estado HTTP y su significado).
Bueno, suficiente teoría. Veamos cómo podemos hacer esto en la terminal. Una gran herramienta para recuperar solicitudes usando HTTP que también nos brinda la capacidad de examinar el código de estado es cURL, que está disponible en los repositorios de Ubuntu. Puedes instalarlo con:
sudo apt-get install curl
Una vez que lo tenga instalado, puede invocarlo así:
curl [website]
... y el contenido de la URL dada se imprimirá en el terminal. Esta es la información que ve su navegador web cuando visita esa URL. ¿Cómo nos ayuda esto? Bueno, mira de cerca las banderas del curl
comando . Si pasamos el parámetro --head
, cURL devolverá solo los encabezados de la solicitud. Pruébalo con una URL. Obtendrá una lista de líneas del formulario:
header-name: header-value
Tenga en cuenta, por supuesto, que la primera línea no se parece en nada a esto. ¿Recuerdas el código de estado del que hablamos anteriormente? Lo notará en la primera línea como el número de tres dígitos. Lo que tenemos que hacer ahora es extraerlo de la primera línea usando Perl, y podemos hacerlo en la terminal usando la -e
bandera de Perl que nos permite pasar el código de Perl directamente al intérprete de Perl. También necesitaremos agregar un indicador adicional a cURL ( --silent
) para evitar que muestre una barra de progreso y estropee nuestro script Perl.
Esto es lo que necesitamos ... es bastante complicado debido a la necesidad de escapar mucho del shell:
perl -e "\ $ s = \` curl [URL] --head --silent \ `; \ $ s = ~ m / (\\ d {3}) /; print \ $ 1"
Lo que esto está haciendo básicamente es buscar la URL con cURL y ejecutarla a través de una expresión regular de Perl que extrae el código de estado y lo imprime.
Ahora todo lo que necesita es poner la URL del archivo que está buscando y compararlo con '404'. Si obtiene '404', puede asumir que el archivo no existe.
Por supuesto, esto podría ser muy difícil de manipular en el terminal, por lo que puede escribir un pequeño script que haga que esto no solo sea más fácil de entender, sino también más fácil de ejecutar:
#!/usr/bin/perl
# Get the URL
$url = $ARGV[0];
# Fetch the header
$header = `curl $url --head --silent`;
# Try to find the status code
$header =~ m/(\d{3})/;
# Return the result
exit(0) if $1 == 404;
exit(1);
Simplemente copie y pegue eso en un archivo. Para este ejemplo, llamaré al archivo url_check
. Luego haga que el archivo sea ejecutable con:
chmod 755 url_check
Luego puede verificar cualquier archivo con el siguiente comando simple:
./url_check [URL]
El valor de retorno será '0' si el servidor devolvió un 404 y '1' de lo contrario. Luego puede encadenar este comando en el shell como lo haría con cualquier otro comando.
ping
no envía solicitudes HTTP en absoluto. Por el contrario,ping
utiliza un protocolo llamado 'ICMP' para determinar si se puede acceder a un host y verificar la latencia.