Ich versuche den Inhalt einer Variablen aus einem anderen IP-Symcon System abzufragen.
Das Ziel System verwendet SSL für den Webzugriff. Externer Zugang ist freigeschaltet und ich kann problemlos auf die Webseite zugreifen.
Mein Code sieht so aus :
Wobei für „user“ mein Lizenz Name,für „password“ mein passwort des Zielsystems und für „127.0.0.1“ der DynDns Name meine Zielsystems steht.
Ich erhalte dann die folgende Fehlermeldung :
Warning: file_get_contents(http://…XXXXXXXXXX:82/api/): failed to open stream: HTTP request failed! in C:\IP-Symcon\scripts__jsonrpc.inc.php on line 33
Warning: array_walk_recursive() expects parameter 1 to be array, null given in C:\IP-Symcon\scripts__jsonrpc.inc.php on line 40
Warning: file_get_contents(): Unable to find the wrapper „https“ - did you forget to enable it when you configured PHP? in C:\IP-Symcon\scripts__jsonrpc.inc.php on line 33
Warning: file_get_contents(): Unable to find the wrapper „https“ - did you forget to enable it when you configured PHP? in C:\IP-Symcon\scripts__jsonrpc.inc.php on line 33
Warning: file_get_contents(https://…xxxxxxxxxxxxxxxxxx/api/): failed to open stream: Invalid argument in C:\IP-Symcon\scripts__jsonrpc.inc.php on line 33
Warning: array_walk_recursive() expects parameter 1 to be array, null given in C:\IP-Symcon\scripts__jsonrpc.inc.php on line 40
Ich denke schon da ich SSL(Plink) einsetze und die Webseiten alle über SSL abgesichert sind, das würde ohne SSL Library nicht funktionieren. An das Logfile komme ich im Moment nicht ran
Plink macht das doch ohne Lib, oder ? Aber für IPS wird ja eigentlich immer eine geladen, Thema ist ja manchmal die Version wegen Abhängigkeiten von PHP-Modulen.
Aber vielleicht bin ich ja auch auf dem Holzweg… jemand Ideen ?
Michael
Mich wundert, das es überhaupt noch mit dem URL-Format http://user:password@ipshost:82…funktionieren soll, da der Username normalerweise die Lizenz-Email ist, wo auch schon ein @ drin ist und deshalb dem file_get_contents nicht mehr klar ist, was der Username und was der Host ist. Stattdessen sollte man doch einen Base64 codierten HTTP Authheader mitschicken, was ich in der API-Wrapper Klasse auch gemacht habe.
Wenn ich in _jsonrpc so reinschaue wird auch nicht geprüft, ob überhaupt ein gültige JSON-Antwort vom Server kommt. Wenn jsondecode in Zeile 35 Null zurückliefert, liefert ObjectTo Array(ab Zeile 50) auch Null und so kommt bei der Arraywalk-Funktion auch nie ein Array an.
Liebe Jungs, dass ist bestimmt die Lösung aber ich scheitere schlicht an meiner Unkenntnis zu diesem Thema. Ich habe jetzt den folgenden Syntax versucht :
Vielleicht reicht es auch wenn du username und password getrennt mit urlencode kodierst? K.a. wie PHP das im Wrapper umsetzt.
Viel mir jetzt noch so ein, wegen Punkt und @ im Usernamen.
Finde es aber dennoch merkwürdig das er sagt er hat für https keinen Wrapper …
Michael
Sorry wenn ich mich da so einmische… diese ganze API ist im Moment für mich nicht so ganz Nachvollziehbar.
Mit ein paar Zeilen Code , ohne Passwort und Code Prüfungen, alles machbar ist ?
Simpel … den code in das webfront Verzeichnis als zb. x.php und dann im Browser http://ip/x.php?f=GetValue&p1=11214 <- natürlich eine gültige ID angeben.
<?
$function=$_REQUEST['f']; $params=[];
for($j=1;$j<3;$j++){
if(isSet($_REQUEST['p'.$j])){
$v=$_REQUEST['p'.$j];
if (is_bool($v))$params[]=(bool)$v;
else if(is_numeric($v))$params[]=(int)$v;
else $params[]=$v;
}
}
if(function_exists($function)){
switch(count($params)){
case 1: $return=$function($params[0]);break;
case 2: $return=$function($params[0],$params[1]);break;
case 3: $return=$function($params[0],$params[1],$params[1]);break;
default : $return=$function();
}
}else $return='NICHTS';
echo $return;
?>
Die Datenaustausch-Doku ist mM. von den Beispielen her wirklich outdated.
Wie beschrieben verwende ich meine eigene API-Wrapper Klasse statt _jsonrpc.php. Funktioniert bis jetzt bestens. Einfach in die Konfig Host, User und Password eintragen, bei Bedarf den Wrapper neu generieren und includen, dann kann man die normalen IPS-Funktionen wie innerhalb von IPS direkt aufrufen.
@softbar: Sollte im Prinzip so gehen. Parameter-Checks vor dem Aufruf und Fehlerbehandlung wären mehr als sinnvoll.