Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

skript mit http request

Empfohlene Antworten

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 !!!

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

Habe es gerade mal mit einem anderen Beispiel getestet, scheint wohl so nicht zu funktionieren.

Ich mache es meistens so:

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

if [ ${?} -eq 0 ]

then

....

fi

Also im Prinzip das Gleiche wie vorher...

MfG

AnDi_P

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 :) !!!

ok, gut zu wissen und danke für den link

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-

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

Huhu,

kann dem AnDi_P da nur zustimmen bei mir gehts genau so...

mfg

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...

;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.