62 votes

Comment déterminer si une page web existe avec un script shell ?

J'essaie de créer un programme capable de convertir une série de mangas en un seul fichier pdf, et je ne veux pas avoir à essayer de télécharger l'image pour déterminer si j'ai la bonne url. Existe-t-il une commande de script shell que je puisse utiliser pour vérifier simplement si une page Web existe ?

0 votes

Quelle coquille ? Le shell UNIX ? Invite de commande Windows ? Windows Powershell ?

0 votes

UNIX, je présume, parce qu'il a une étiquette unix.

112voto

zneak Points 45458

Sous un *NIX, vous pouvez utiliser curl pour émettre un simple HEAD demande ( HEAD ne demande que les en-têtes, pas le corps de la page) :

curl --head http://myurl/

Ensuite, vous ne pouvez prendre que la première ligne, qui contient le code d'état HTTP (200 OK, 404 Not Found, etc.) :

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

Puis vérifiez si vous avez obtenu une réponse décente (code d'état 200 ou 3**) :

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

Cela produira la première ligne si le code d'état est correct, ou rien s'il ne l'est pas. Vous pouvez aussi envoyer cette ligne vers /dev/null pour ne pas obtenir de sortie, et utiliser la commande $? pour déterminer si ça a marché ou pas :

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

EDIT -s simplement simplement pour dire curl pour ne pas afficher de "barre de progression".

5 votes

Pour faire cela avec moins d'analyse des chaînes de caractères, et pour vérifier les redirections vers des pages inexistantes, utilisez ceci curl --silent --head --location --output /dev/null --write-out '%{http_code}' http://en.wikipedia.org/wiki/tla | grep '^2'

0 votes

Script pour automatiser la validation d'un certain nombre de fichiers : gist.github.com/igilham/12eb33ab8a86f1e815d2

3 votes

D'après mon expérience, je sais que ça vaut la peine d'ajouter --connect-timeout <seconds> option.

26voto

Sithsu Points 901

Utilisez cURL pour obtenir le code d'état et vérifier les valeurs requises.

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

15voto

JDeveloper Points 1733

Tout d'abord, assurez-vous qu'il n'y a pas de problème d'autorisation. Si une autorisation est requise, vous devez fournir le nom d'utilisateur et le mot de passe. Créez un fichier shell script (checkURL.sh) et collez le code ci-dessous.

J'espère que cela vous aidera.

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

Cela fonctionne pour moi dans Nexus et d'autres dépôts.

4voto

Alek Points 139

Vous pouvez toujours utiliser wget ; je le fais car le code est plus simple.

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

Utilisation de la -O- option avec wget signifie qu'il essaiera d'afficher le contenu de la page, mais seulement si elle existe. Donc, s'il n'y a pas de sortie, la page n'existe pas. Le site 2>/dev/null est juste pour envoyer la sortie (s'il y en a une) à la poubelle.

Je sais que c'est en retard, mais j'espère que ça aidera.

0voto

s3n0 Points 385

Wget dispose d'une fonctionnalité efficace à cet effet, en utilisant son --spider argument. Si la page web est trouvée, le code de retour est 0. Pour d'autres erreurs, le code de retour est supérieur à 0.

Par exemple :

URL="http://www.google.com"

if wget --spider "$URL" 2>/dev/null; then
    echo "$URL web-page exists !"
else
    echo "$URL web-page does NOT exists !"
fi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X