Befehlszeilen-Webanforderungsclient, der Inhalt ausgibt und einen Exit-Status ungleich Null zurückgibt, wenn Fehler 404/etc

Ich brauche einen Linux-Befehl, um eine HTTP-Anforderung zu starten, und:

  • gibt die HTTP-Antwort (Inhalt, nicht Header) auf der Standardausgabe des Terminals aus
  • einen Befehlsfehlerstatus von 0 zurückgeben, wenn die Anfrage gut verlief (mit HTTP-Code 200 OK endete), und in allen anderen Fällen ungleich Null (404, 500, Verbindung fehlgeschlagen usw.)

Kostenlos, muss auf den meisten Linux-Distributionen funktionieren, Bonus für Mac.

curl scheint dazu nicht in der Lage zu sein, da sein --failSchalter die HTTP-Ausgabe verhindert.

Rohe Idee: ein einfacher Bash-Wrapper. Erfassen Sie die Ausgabe in einer Datei, prüfen Sie den HTTP-Status und handeln Sie dann entsprechend ( catdie Datei und rc=0oder einfach rc>0anders)?
Hochgestimmt. Vergessen Sie nur nicht, Ihre zu löschen, $HEADERSwenn Sie fertig sind, oder nach einer Weile haben Sie viele temporäre Dateien :)
Jederzeit! Ich habe viele ähnliche Probleme auf diese Weise gelöst – Bash kann mit ein paar Zeilen viel bewirken. Und wenn es ein Einzeiler ist, endet es oft als Alias ​​:)

Antworten (1)

Dieser kleine Bash-Wrapper macht den Trick:

#!/bin/bash
# Perform a web request, dump content, and exit with relevant exit code

# Take URL as command-line argument
URL=$1

# Launch HTTP request
HEADERS=`mktemp`
curl --dump-header $HEADERS $URL

# Read the first header (example: HTTP/1.1 200 OK)
HEADER=`head -n 1 $HEADERS`

# Remove temporary file
rm $HEADERS

# Return success if HTTP code OK, or failure for any other HTTP code
if [[ $HEADER == *" 200 "* ]]; then
  exit 0
else
  exit 1
fi

Es erfordert Curl und Bash .

Lizenz: Gemeinfrei