Zum Inhalt springen

skript mit http request


podsau

Empfohlene Beiträge

Hallo,

ich hab folgendes Problem.

ich will in einem skript mit "curl" http requests an einen server schicken. dazu hab ich mehrere dateien in denen meine parameter liegen die in den requests mitgeschickt werden sollen. diese übergebe ich an curl und schicke das ganze ab. wenn alle requests erfolgreich waren sollen alle dateien in den unterordner backup verschoben werden.

-


for i in *.ref1; do


  echo $i


  dateiname="@${i}"

  curl -S --connect-timeout 4 -d $dateiname  "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx"


  if [ $? = 0 ]

  then

          echo "0"

          mv $i backup/

  else

          echo "ERROR"

  fi


done

das klappt soweit ganz gut. nun hänge ich aber bei der fehlerbehandlung.

mit " if [ $? = 0 ]" kann ich prüfen ob der timeout den ich festgelegt hab zuschlägt. es also eine verbindung zum server aufgebaut werden konnte.

bei den parametern die ich mitsende handelt es sich z.b um einen hash der wiederum beim webserver gegengeprüft wird. stimmt der nicht liefert dieser mir einen error zurück

Ausgabe auf der Konsole:

ERROR:ChecksumInvalid

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT D/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head><title>

jetzt dachte ich mir pack ich den curl aufruf in eine if-abfrage und häng hinten dran ein grep welches auf "ERROR" prüft

im stil von

if [ curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep "ERROR" = true ]

then ...

ich weis nun nicht so recht wie die korrekte syntax für so eine abfrage aussehen könnte (ich hab schon mehrere probiert aber immer ohne erfolg), ob das so überhaupt möglich ist oder es vielleicht eine viel bessere lösung gibt ?

vielen dank schon mal im vorraus !!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

if [ curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep "ERROR" = true ]

Ich würde es mal so probieren:

if [ `curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep -q "ERROR"` = 0 ]

Hinzugekommen sind die Backticks "`" vor und nach dem Kommando, sowie der Parameter "-q" bei dem grep. Dadurch liefert das grep einen Rückgabewert, je nach dem ob der Suchbegriff gefunden wurde, oder nicht. Also quasi das, was du mit dem "true" abbilden wolltest.

LG

Link zu diesem Kommentar
Auf anderen Seiten teilen

hallo AnDi_P,

deine 2. Variante klappt genau so wie ich mir das gewünscht hab. was ich noch nich so ganz verstehe is warum:

curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep -q "ERROR"

eine 0 zurück liefert wenn er ein "ERROR" findet und eine 1 wenn keins vorhanden ist. müsste das nich genau umgedreht sein?

trotzdem erstma vielen dank :) !!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

im Allgemeinen ist es so Linux festgelegt, dass ein Rückgabewert = 0 immer erfolgreich bedeutet. Alles != 0 deuted auf einen Fehler hin.

Wieso, weshalb, warum? Weiß ich nicht - vielleicht sieht's schöner aus ;)

Hier noch mal was zum Lesen dazu:

http://openbook.galileocomputing.de/linux/linux_07_shellskript_programmierung_009.htm#mjf5c6e0943531b66a4e40be08312c572c

MfG

Andi_P

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Leute,

also in der man page zu grep welche ich einfach mal auf einem unserer SLES 10 Server geöffnet habe, steht folgendes unter der Beschreibung des Parameters "-q" für den grep Befehl:

-q, --quiet, --silent

Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an

error was detected. Also see the -s or --no-messages option.

So wie es beschrieben ist, gibt das grep immer eine NULL zurück. Selbst bei einem Fehler, sofern diese Option genutzt wird. Eine NULL gibt's auch zurück wenn er keinen Sucherfolg hatte.

Gruß,

-Carmann-

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

stimmt, haste Recht, dass das da in der man-page steht ;)

Ich hab's gerade aber nochmal explizit nachgetestet, und benutze es bei vielen Scripten, und bei mir gibt "grep -q <Suchbegriff>" immer eine 0 wenn gefunden, und eine 1, wenn nicht.

Vielleicht ein Fehler in der man-page?

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

So wie es beschrieben ist, gibt das grep immer eine NULL zurück. Selbst bei einem Fehler, sofern diese Option genutzt wird. Eine NULL gibt's auch zurück wenn er keinen Sucherfolg hatte.

Äh, nein, so wie es beschrieben ist, gibt das grep immer eine Null zurück, wenn die Eingabe auf das Suchmuster passt, selbst, wenn dabei Fehler aufgetreten sind.

Sorry für die Klugsch...

;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...