web-dev-qa-db-fra.com

Comment déterminer si une page Web existe avec des scripts Shell?

J'essaie de créer un programme qui peut convertir une série de scans 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 peux utiliser pour vérifier simplement si une page Web existe?

55
Branden

Sous un * NIX, vous pouvez utiliser curl pour émettre une simple demande HEAD (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 non trouvé, etc.):

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

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

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

Cela affichera la première ligne si le code d'état est correct, ou rien s'il ne l'est pas. Vous pouvez également diriger cela vers/dev/null pour obtenir aucune sortie et utiliser $? pour déterminer si cela a fonctionné ou non:

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

MODIFIER -s indique simplement à curl de ne pas afficher de "barre de progression".

105
zneak

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

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

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

J'espère que ceci 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

Son travail pour moi dans Nexus et autres référentiels.

13
JDGuide

Vous pouvez toujours simplement utiliser wget; Je fais comme 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

En utilisant le -O- option avec wget signifie qu'il essaiera de sortir le contenu de la page, mais seulement s'il existe. Donc, s'il n'y a pas de sortie, la page n'existe pas. Le 2>/dev/null est juste pour envoyer la sortie (s'il y en a) dans la corbeille.

Je sais que c'est en retard, mais j'espère que cela aide.

2
Alek