Verwenden von Curl, um eine HEAD-Anfrage mit einem harten Timeout zu stellen

8

Ich möchte curleine HTTP-HEAD-Anfrage an eine URL senden, um zu überprüfen, ob sie ordnungsgemäß funktioniert (Server ist aktiv und sendet eine erfolgreiche Antwort). Am Ende muss der endgültige HTTP-Antwortcode und die URL zurückgegeben werden (nachdem alle Weiterleitungen befolgt wurden). Schließlich muss ich ein festes Zeitlimit festlegen (eine Zeitspanne, nach der der Anruf fehlschlägt, unabhängig davon, wo sich die Anforderung curlbefindet).

Hat curlunterstützt dies alles? Welche Optionen muss ich verwenden, um dies zu erreichen?

jrdioko
quelle

Antworten:

17

curl -I generiert eine HEAD-Anfrage.

Durch Hinzufügen der -LOption werden Weiterleitungen gefolgt.

Zeitüberschreitungen können mit verschiedenen Optionen gesteuert werden, je nachdem, für welchen Teil der Anforderung Sie eine Zeitüberschreitung wünschen.

Von der Manpage :

--connect-timeout <seconds>
          Maximum time in seconds that you allow the connection to the server to take.  This only limits the connection phase, once curl has connected this option is of no more use. See also the -m/--max-time option.

    -m/--max-time <seconds>
          Maximum time in seconds that you allow the whole operation to take.  This is useful for preventing your batch jobs from hanging for hours due to slow networks or links going down.  See also the --connect-timeout option.

Weitere zeitübergreifende Optionen, die ebenfalls einen Blick wert sind, sind:

--retry
--retry-delay
--retry-max-time
Ladadadada
quelle
Vielen Dank, wie wäre es mit dem Abrufen der endgültigen URL und des Antwortcodes?
Jrdioko
1
Die endgültige URL ist der Wert des Location:Headers der vorherigen Antwort. Der endgültige Antwortcode wird normal zurückgegeben. Das alles zusammen mit grep zu verketten würde ungefähr so ​​aussehen : curl -s -I -L -m 4 http://example.com | grep -E "^Location|^HTTP" | tail -2. Die -sOption stoppt das Curl-Drucken des Download-Fortschritts. tail -2beschränkt die Ausgabe nur auf den endgültigen Standortheader und den endgültigen HTTP-Antwortcode.
Ladadadada