JSON-RPC und HTTP GET - Newbie

Hallo Gemeinde,

ich habe eine blöde Frage:
Wie sieht denn die URL für einen GET aufruf z.B. für folgenden Befehl aus?:

$rpc = new JSONRPC("http://user:password@127.0.0.1:82/api/");
$result = $rpc->IPS_GetKernelDir();
echo "KernelVersion: ".$result;

Oder

$rpc = new JSONRPC("http://user:password@127.0.0.1:82/api/");
$rpc->IPS_RunScript(34956);

Nur HTTP POST ist möglich.

paresy

Die URL ändert sich nicht. Schau in den Quelltext der JSONRPC-Klasse herein (liegt im scripts Ordner als include). Intern wird ein POST auf genau diese URL gemacht und die Parameter dabei im JSON-Format als Message Body übertragen. Die Funktion selbst ist auch nur ein Parameter. Message Body sollte aber bei einem Get nicht genutzt werden und kann zu Fehlermeldungen führen: http://stackoverflow.com/questions/978061/http-get-with-request-body/15656884#15656884

Tommi

Edit: Paresy war schneller…

Kleine Ergänzung: Im Klartext würde der JSON Message Body für den POST Request bei deinem Beispiel dann so aussehen:


{"jsonrpc": "2.0", "method": "IPS_GetKernelDir", "params": [], "id": 1}

bzw.


{"jsonrpc": "2.0", "method": "IPS_RunScript", "params": [34956], "id": 1}

Der POST Request sollte am besten noch diesen HTTP Header gesetzt haben:


Content-Type:application/json; charset=utf-8

Gruss
Johannes

Hallo,

ich hoffe ich darf mich hier einmal anhängen. Ich würde auch gerne über eine HTTP-Anfrage (http-post) über die JSON Schnittstelle Daten an IPS senden. Mein System bietet mir dabei die Möglichkeit über http (Get oder Post)-Requests mit anderen System zu kommunizieren. Leider bekomme ich es noch nicht hin, dass ich Daten zu IPS senden kann.

In meinem Bussystem kann ich neue Geräte anlegen, dabei Benötige ich die IP und evtl. Login-Daten:


Ich habe den Fernzugriff aktiviert und meinen Lizenz-Namen und das Fernzugriffspasswort als Login-Daten verwendet. Bei der IP-Adresse habe ich die Adresse der WebFront „127.0.0.1“ genommen. Diese dürfte allerdings falsch sein, da ich über die Adresse nur vom Computer (wo IPS drauf läuft) zugreifen kann. Wo kann ich die IP-Adresse von IPS sehen?

Wenn ich das Gerät (hier: IPS) angelgt habe, kann die Befehle programmieren (in Lua). Ich weiß, dass ich nur über Post auf die API zugreifen kann und ich deshalb meine Programmierung in der Header-Modifizierung eintragen muss. Leider weiß ich auch dort nicht ob ich es richtig gemacht habe:


Ich denke hier fehlen noch die Angaben der Parameter. Die beim Get-Befehl werden die Parameter eigentlich nur der IP-Adresse angehängt und bilden somit einen Http-Request, soweit ich es richtig verstanden hab. Als TCP-Port habe ich 3777 verwendet, da dieser für die JSON API steht.

Wenn ich meinen Befehl teste erhalte ich folgende Antwort:
Antwort nach Test.png

Ich hoffe mir kann hierbei jemand helfen und mir evtl. das ganze ein wenig verständlicher machen.
Da mir das System schon ein vorprogrammiertes Beispiel für Sonos Geräte zur Verfügung stellt wollte ich dieses noch einmal als Beispiel zeigen:

Lieben Gruß
Snook