Comment obtenir une réponse de n'importe quelle URL?

23

On m'a demandé d'écrire un script shell pour vérifier si une URL est UP / Working ou non pour mon projet.

J'ai essayé de trouver des indices sur Internet, mais tout ce que j'ai obtenu est de vérifier si l'URL existe ou non.

J'ai d'abord essayé avec wget.

wget -S --spider https://genesis-dev.webbank.ssmb.com:21589/gop-ui/app.jsp 2>&1 | awk '/^  /'
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi

Ma prochaine tentative était avec curl.

curl -ivs  https://genesis-dev.webbank.ssmb.com:21589/opconsole-sit/opconsole.html#
if [ $? -ne 0 ]
then echo "Server is UP"
else
echo "Server is down"
fi

Mais, les deux vérifient l'existence de l'URL et non la réponse.

Akash
la source
1
Je viens de jeter un coup d'œil à l'homme curl et il semble suggérer que si vous utilisez --fail flag, il retournera un code de sortie de 22 plutôt que de retourner une page indiquant le problème, donc seulement '200 OK' donnera une valeur de retour de 0.
Guy

Réponses:

20

curl -Is http://www.yourURL.com | head -1Vous pouvez essayer cette commande pour vérifier n'importe quel code URL.Status 200 OKsignifie que la demande a réussi et que l'URL est accessible.

Vous pouvez également tester la disponibilité des URL et obtenir le code de réponse à l'aide de la telnetcommande

telnet www.yourURL.com 80

80 est le numéro de port.

Thushi
la source
Merci d'avoir partagé. J'ai également essayé, mais je pense que cela vérifie également l'existence uniquement. $ sh q.sh URL à vérifier: google.com/akash google.com/akash existe mais cela donne une erreur dans le navigateur :: 404. C'est une erreur.
Akash
@Akash: Pouvez-vous accéder à ce lien via votre navigateur?
Thushi
si c'est le lien qui vous parle--www.google.com/akash-- alors NON-- Cela me donne une erreur :: "404-not found"
Akash
Ouais, si cette URL n'existe pas alors elle devrait :) À quoi d'autre vous attendez-vous ???
Thushi
Mais- cela me donne - qu'il existe .. Ci-dessous le code :: $ vi q.sh #! / Bin / ksh echo "donnez votre url" lisez url curl -ls "& url" | tête -1 si [$? -eq 0] puis echo "Exist" else echo "does not Exist" fi Quand je lance ceci :: $ sh q.sh donnez votre url www.google.com/akash Exist mais cela devrait aller à ELSE ..
Akash
5

Vous pouvez effectuer les opérations suivantes

#!/bin/bash

read -p "URL to check: " url
if curl --output /dev/null --silent --head --fail "$url"; then
  printf '%s\n' "$url exist"
else
  printf '%s\n' "$url does not exist"
fi

Les ifdéclarations ne sont pas nécessaires si, je les mets ici juste pour illustrer le flux du script.entrez la description de l'image ici

Valentin Bajrami
la source
j'ai essayé cela et cela ne me donne pas les résultats escomptés.
Akash
$ sh q.sh URL à vérifier: www.google.com% s \ n www.google.com n'existe pas
Akash
@Akash Voir la réponse mise à jour. Ne mettez pas d'extension à votre script. Exécutez-le également juste à côté ./checkURL. J'espère que ça aide
Valentin Bajrami
J'en ai besoin pour Project-Purpose .. pense- n'ai pas accès pour le faire fonctionner comme ça .. :(
Akash
Qu'y %s\n mettez-vous? sur votre commentaire? Objectif du projet? Vous devez être plus précis sur ce que vous essayez d'accomplir.
Valentin Bajrami
1

La chose suivante a fonctionné pour moi ....

status="$(curl -Is http://www.google.com | head -1)"
validate=( $status )
if [ ${validate[-2]} == "200" ]; then
  echo "OK"
else
  echo "NOT RESPONDING"
fi

J'ai essayé de ce que @THUSHI a écrit.

Abhishek Tiwari
la source
0

Si vous pingl'URL, cela vous donnera également une réponse

ping -c 5 www.google.com

-ccomptera jusqu'à l'expiration du délai de 5.

À la lumière de ce qui m'a été conseillé, nmappeut fonctionner si votre package est installé sur votre système. curlserait une meilleure option, mais néanmoins voici un exemple utilisant nmap:

nmap -p 80 -sT www.google.com

ryekayo
la source
pingenvoie un ICMPmessage et n'utilise certainement pas le port 80ou 443. Certains serveurs bloquent également les requêtes ping, ce qui rend la tentative non fiable.
Valentin Bajrami
Vous pouvez également envoyer une requête ping aux ports. Je vais soumettre un exemple de ping sur un port sur un site Web en utilisant nmap
ryekayo
nmap -p 80 -sT www.google.com envoie une requête ping au port 80. Je modifierai ma réponse sous peu lorsque
j'aurai
1
nmapest encore un package non par défaut dans de nombreux systèmes * nix. curlest plus souvent livré avec le système de base. Vous auriez encore besoin d'installer nmappour réaliser quelque chose qui peut être réalisé avec les outils standard * nix.
Valentin Bajrami
1
Compris, merci pour l'info. J'ai mis à jour ma réponse
ryekayo
0

La plupart du temps, curl ne fonctionne pas sur https si vous voulez vérifier, vous pouvez vérifier via "curl --version", vous ne verrez pas l'option https dans ce cas, vous pouvez utiliser ci-dessous

wget --post-data '{"name":"Radha", "Car": "Jaquar"}' --header "Content-Type: application/json" --no-check-certificate https://yourrequiredURI

Yanish Pradhananga
la source
-2
status="curl \"${server}:${port}\""  >/tmp/tmp.txt
host_check='grep "<html" /tmp/tmp.txt'
Gyanesh Gupta
la source