Je pense que curl ferait l'affaire. J'ai écrit dans un script:
#!/bin/sh
function test {
res=`curl -I $1 | grep HTTP/1.1 | awk {'print $2'}`
if [ $res -ne 200 ]
then
echo "Error $res on $1"
fi
}
test mysite.com
test google.com
Le problème ici est, peu importe ce que je fais, je n'arrive pas à arrêter l'impression de ce qui suit sur stdout:
% Total % Received % Xferd Average Speed Time Time Time Current
Je veux qu'un cronjob exécute ce script et s'il écrit un tel message, chaque fois que je l'exécuterai, j'obtiendrai un e-mail car quelque chose a été imprimé sur stdout dans cron, même si le site peut convenir.
Comment puis-je obtenir le code d'état sans mettre de courrier indésirable dans stdout? Ce code fonctionne sauf la jonque bonus de la sortie standard qui m'empêche de l'utiliser.
tu veux
Cela vous donnera le code HTTP_STATUS comme seule sortie.
la source
Je le ferais comme ça pour m'assurer d'être redirigé vers l'hôte final et d'obtenir la réponse de celui-ci:
la source
Utilisez ceci comme votre condition ...
la source
comme indiqué ci-dessus, curl peut fournir nativement la réponse http:
Exemple 1 avec
-s
nous faisons taire la progression et-o /dev/null
nous permet de jeter la réponse mais-w
est votre allié ici:Cela peut être encore simplifié en natif dans curl en demandant les url_effective et redirect_url:
Exemple 2, nous voyons notre réponse http initiale, les domaines demandés d'origine et redirige le serveur avec:
Cependant, si vous cherchez en fin de compte à établir une réponse 200 même après une redirection 301 ou 302: alors vous pouvez et supprimer le 'redirect_url' susmentionné
Exemple 3, nous ajoutons
-L
qui demande à curl de poursuivre la ou les redirection (s):la source
some_user
un nom réel) ou "Comme d'autres l'ont souligné"