2010-05-27 17 views
48

Estoy tratando de hacer un programa que puede convertir una serie de escaneos manga en un archivo pdf, y no quiero tener que intentar descargar la imagen para determinar si tengo la url correcta. ¿Existe un comando de shell scripting que pueda usar para verificar si existe una página web?¿Cómo puedo determinar si existe una página web con scripts de shell?

+0

¿Qué shell? Shell UNIX? ¿Símbolo del sistema de Windows? Windows Powershell? – zneak

+0

UNIX, supongo, porque tiene una etiqueta de Unix. – thepiercingarrow

Respuesta

87

Bajo un * NIX, puede utilizar curl para emitir un simple petición HEAD (HEAD sólo pregunta por los encabezados, no el cuerpo de la página):

curl --head http://myurl/ 

, entonces puede tomar sólo la primera línea, el cual contiene el código de estado HTTP (200 OK, 404 no encontrado, etc.):

curl -s --head http://myurl/ | head -n 1 

Y a continuación, comprobar si tienes una respuesta decente (código de estado es 200 o 3 **):

curl -s --head http://myurl/ | head -n 1 | grep "HTTP/1.[01] [23].." 

Esto mostrará la primera línea si el código de estado es correcto, o nada si no lo es. También puede canalizar que a/dev/null para obtener ninguna salida, y el uso de $? para determinar si ha funcionado o no:

curl -s --head http://myurl/ | head -n 1 | grep "HTTP/1.[01] [23].." > /dev/null 
# on success (page exists), $? will be 0; on failure (page does not exist or 
# is unreachable), $? will be 1 

EDITAR-s simplemente le dice a curl para no mostrar una "barra de progreso".

+3

Para hacer esto con menos cadenas de análisis, y para verificar si hay redirecciones a páginas no existentes, use este 'curl --silent --head --location --output/dev/null --write-out '% {http_code}' http://en.wikipedia.org/wiki/tla | grep '^ 2' ' – bukzor

+3

Uso --fail: http://stackoverflow.com/a/12199125/376366 –

+0

Secuencia de comandos para automatizar la validación de varios archivos: https://gist.github.com/igilham/12eb33ab8a86f1e815d2 – IanGilham

-2

wget o cURL hará el trabajo. Consulte aquí wget o cURL para obtener detalles y ubicaciones de descarga. Proporcione el URL a estas herramientas de línea de comandos y verifique la respuesta.

+0

Pfff ... ¿por qué los votos a favor (sin explicación, tenga en cuenta) si la respuesta es correcta, breve e informativa? –

+1

No voté, pero si tuviera que adivinar, es porque las respuestas de solo URL están [desaconsejadas] (https://meta.stackexchange.com/questions/8231/are-answers-that-just-contain- links-elsewhere-really-good-answers). – zneak

+0

Gracias. TBH, la pregunta era "¿Hay un comando de script de shell que pueda usar para verificar si existe una página web?" y mi respuesta fue "wget ​​o cURL harán el trabajo", más enlaces a cada comando y una explicación de que la respuesta de esas invocaciones de comando podría ser revisada. Esa no es una respuesta de solo URL, por cualquier medida, y fue tan informativa como la otra respuesta (revisión) que estaba disponible en ese momento: https://stackoverflow.com/revisions/2924444/1. Por desgracia, al parecer, un mal día de karma :-) –

17

Utilice CURL para obtener el código de estado y verificar los valores requeridos.

status=$(curl -s --head -w %{http_code} http://www.google.com/ -o /dev/null) 
echo $status 
8

primer lugar asegúrese de que no hay ninguna autorización issue.If falta una autorización, se proporciona el nombre de usuario y contraseña .Create un archivo de script de shell (checkURL.sh) y pega el siguiente código.

Espero que esto te ayude.

checkURL.sh

yourURL="http://abc-repo.mycorp.com/data/yourdir" 

if curl --output /dev/null --silent --head --fail "$yourURL" 
then 
    echo "This URL Exist" 
else 
    echo "This URL Not Exist" 
fi 

Su trabajo para mí en Nexus y otro repositorio.

1

Siempre puede usar wget; Hago como el código es más simple.

if [[ $(wget http://url/ -O-) ]] 2>/dev/null 
    then echo "This page exists." 
    else echo "This page does not exist." 
fi 

El uso de la opción -O- con wget significa que se va a tratar de dar salida a los contenidos de la página, pero sólo si existe. Entonces, si no hay ningún resultado, entonces la página no existe. El 2>/dev/null es solo para enviar la salida (si hay alguna) a la papelera.

Sé que se ha retrasado, pero espero que esto ayude.

Cuestiones relacionadas