JSON-RPC API Rückgabewert bei nicht Erreichbarkeit

Hallo,

JSON-RPC API ist performant - weitreichend umfangreich - und einfach handelbar - nur!!! - wenn das Gegenueber nicht erreichbar ist finde ich keine Moeglichkeit das solide abzufangen.

Gibts da sowas wie einen auswertbaren Response?

VG Stephan

ein Vorabcheck mit positiv Sys_GetURLContentEx kann zumind. als Lebenszeichen gewertet werden - und bei negativ faellt die Fehlermeldung als Warning: Connect timed out. rel. moderat aus!

Toll ist das aber nicht.

Ich habe eine Update für die 3.4er Beta gemacht, womit folgendes Möglich ist:


try {
    echo (new JSONRPC("http://192.168.1.200:80/api/"))->IPS_GetKernelDir();
} catch (JSONRPCException $e) {
    echo 'RPC Problem: ',  $e->getMessage(), "
";
} catch (Exception $e) {
    echo 'Server Problem: ',  $e->getMessage(), "
";
}

paresy

somit muss ich mich bis zur 3.4er noch gedulden! und bis dahin einfach murksen!

VG Stephan

Du kannst bis dahin meine API Wrapperklasse nutzen, die kann das schon von Anfang an. Im Konstruktor als 4. Parameter (hinter dem Password) ein True übergeben, dann wirft sie auch Exceptions oder die Error Variable abfragen

Tommi

Danke schoen - ist ja KLASSE - muss das erst mal in Ruhe durchlesen!

VG Stephan

so übernommen bekomme ich erst mal

06.01.16 10:45:29 | ScriptEngine | Result for Script 58103
<br />
<b>Warning</b>:  file_get_contents(http://192.168.0.6:80/api/): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized
 in <b>/etc/symcon/scripts/__rpc.inc.php</b> on line <b>89</b><br />
Server Problem: Unable to connect

Also das komplette Programm mit Lizenz und Passwort; sieht bei mir so aus (weil ich die Daten in einem Array habe):

       
            try {
                echo (new JSONRPC ("http://" . $LAN['Svr1']['Li'] . ':' . $LAN[$_IPS['PcRX']]['PW'] . '@' .
                $LAN[$_IPS['PcRX']]['IP'] . ':' . $LAN[$_IPS['PcRX']]['Port'] . '/api/')) -> IPS_GetKernelDir ();
            } catch (JSONRPCException $e) {
                echo 'RPC Problem: ', $e -> getMessage (), "
";
            } catch (Exception $e) {
                echo 'Server Problem: ', $e -> getMessage (), "
";
            }
        

was immer noch eine Meldung im Log bringt:

06.01.16 11:03:32 | ScriptEngine | Result for Script 58103
D:\IPS-Steigerts\

Die kann ich sicher irgendwie abfangen und dem Skript melden, dass alles i.O. ist und es weiterlaufen kann.

Nur wenn der andere PC nicht erreichbar ist, hab ich wieder das Gedöns im Log:

06.01.16 11:09:02 | ScriptEngine | Result for Script 58103
<br />
<b>Warning</b>:  file_get_contents(http://192.168.0.5:80/api/): failed to open stream: No route to host in <b>/etc/symcon/scripts/__rpc.inc.php</b> on line <b>89</b><br />
Server Problem: Unable to connect

zwar nicht so umfangreich, aber es ist wieder eine unnötiger Log-Eintrag.

Gibt es da eine Abhilfe?

Viele Grüsse
Harald

PS: den Hinweis auf „JSON API Wrapper für Perl und PHP“ habe ich gelesen, da fehlt mir aber schon beim Titel das Verständnis, was ein „Wrapper“ ist :confused:

wenn Du die echo Befehle raus nimmst oder durch $var= ersetzt, gibt es auch keine Eintrage im Log. Allerdings weißt Du dann auch nicht mehr, woran es hakt.

Ein Wrapper ist ein Set von Funktionen, der auf vorhandene Funktionen aufbaut und ggfls. anders bereitstellt und/oder. inhaltlich ergänzt.

Tommi