Ich glaube, Curl würde den Job machen. Ich schrieb in einem Skript:
#!/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
Das Problem ist hier, egal was ich tue. Ich kann nicht verhindern, dass das Folgende auf stdout gedruckt wird:
% Total % Received % Xferd Average Speed Time Time Time Current
Ich möchte, dass ein Cronjob dieses Skript ausführt, und wenn er eine solche Nachricht schreibt, erhalte ich jedes Mal eine E-Mail, wenn ich sie ausführe, weil etwas in Cron gedruckt wurde, auch wenn die Site möglicherweise in Ordnung ist.
Wie erhalte ich den Statuscode, ohne in stdout zu geraten? Dieser Code funktioniert nur, wenn der Bonus-Junk für die Standardausgabe mich daran hindert, ihn zu verwenden.
Sie wollen
Dadurch erhalten Sie den HTTP_STATUS-Code als einzige Ausgabe.
quelle
Ich würde es so machen, um sicherzustellen, dass ich zum endgültigen Host weitergeleitet werde und die Antwort von diesem bekomme:
quelle
Verwenden Sie dies als Ihre Bedingung ...
quelle
Wie oben erwähnt, kann curl nativ die http-Antwort liefern:
Beispiel 1, in dem
-s
wir den Fortschritt zum Schweigen bringen und die-o /dev/null
Antwort verwerfen lassen, aber-w
Ihr Verbündeter ist hier:Dies kann nativ in curl weiter vereinfacht werden, indem Sie nach url_effective und redirect_url fragen:
In Beispiel 2 sehen wir unsere anfängliche http-Antwort, die ursprünglich angeforderten Domänen und leiten den Server um, mit dem geantwortet wurde:
Wenn Sie jedoch letztendlich auch nach einer 301- oder 302-Umleitung eine Antwort von 200 erstellen möchten, können Sie die oben genannte 'redirect_url' löschen.
In Beispiel 3 fügen wir hinzu,
-L
was curl anweist, die Weiterleitung (en) zu verfolgen:quelle
some_user
einem tatsächlichen Namen) oder "Wie andere darauf hingewiesen haben"