Seite 1 von 1

xmlHttpRequest an OPSI - RPC

Verfasst: 22 Sep 2016, 14:42
von RegEx.Fail
Guten Tag zusammen,

ich schreibe momentan ein Webinterface, dass auf die Opsi-Schnittstelle RPC zugreifen soll.
Leider bekomme ich keinen funktionierenden xmlHttpRequest auf die Reihe und bräuchte mal ein Beispiel, welches wirklich funktioniert (am besten mit Erklärung), oder eine Verbesserung meines Codes.

Ich nutze momentan PHP,jQuery und Ajax.
Das ganze läuft "Cross-Domain".
Ich spreche (bzw. versuche das zu tun) die RPC Schnittstelle an.

Da das OPSI-Handbuch nicht viel dazu hergibt und auch andere Web-Dokus mir nicht gut geholfen haben, habe ich es
nach vielen Versuchen und vielen Forums-Durchforstungen immerhin soweit geschafft:

Code: Alles auswählen

Anfragekopfzeile:

Host: myOpsiServer:4447
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: */*
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: http://myOtherServer/index.php
Cookie: OPSISID=a0DVZwOyz8TIaAoVBtyMmMDpRksHHKB7
Authorization: Basic YWhvZWZmbmVyOkxiNTZ1QWgxOTI=
Connection: keep-alive

Code: Alles auswählen

Antwortkopfzeile:

Content-Length: 306
Content-Type: text/html
Date: Thu, 22 Sep 2016 12:20:41 GMT
Location: /?callback=jQuery31008833978059370599_1474546841400&id=1&method=getInstallableLocalBootProductIds_list&params=%5B%22mespc020758.intra.honsel.com%22%5D&_=1474546841401/
Server: Twisted/12.0.0 TwistedWeb/[OPSI.web2, version 0.2.0]
mein bisheriger jQuery/Ajax code ist das hier:

Code: Alles auswählen

$.ajax({
				url: 'https://myOpsiServer:4447/',
				path: 'rpc?',
				data: { "id": 1, 
						"method": "getInstallableLocalBootProductIds_list",
						"params": '["RandomPcNo1"]'
					  },
				dataType: 'json',
				type: "POST",
				crossDomain: true,
				username: "user",
				password: "pass",
				success: function(data) {
				console.log(data);
				alert(data);
				}
				});
leider bekomme ich kein JSON oder ähnliches als Antwort, sondern bekomme einen Website-Quelltext mit dem weder ich noch der Browser irgendetwas anfangen kann.....

Re: xmlHttpRequest an OPSI - RPC

Verfasst: 22 Sep 2016, 15:00
von n.wenselowski
Hi,

grundsätzlich spricht opsi JSON-RPC, kein XML. Fängt es da schon an?
Bzgl. Cross-Domain sind mir gerade keine Einschränkungen bekannt, aber ich würde erstmal versuchen allen Stolpersteinen aus dem Weg zu gehen.

Leider kann ich kein jQuery, deshalb hier ein anderes minimales Beispiel:

Code: Alles auswählen

curl --insecure --user username:pw --data '{"params": [], "id": 1, "method": "backend_getInterface"}' https://localhost:4447/rpc
Es schadet in meinen Augen auch nicht den Content-Type mitzugeben:

Code: Alles auswählen

--header "Content-Type: application/json"
Ansonsten kannst du auch direkt mit dem Browser einen Call machen:

Code: Alles auswählen

https://dein.opsi.server:4447/rpc?{%22id%22:1,%22method%22:%22backend_getInterface%22,%22params%22:[]}
Um zu sehen was am Server ankommt kannst du dort den Loglevel auf 8 stellen und den opsiconfd neu starten.
Außerdem kann dir hier das bewusst abwärtskompatible Verhalten des opsiconfd einen Strich durch die Rechnung machen. Such mal im Handbuch nach opsi.header.fix.enable. Den Fix aktiv zu schalten ist in komplett (Server + Clients) auf 4.0.6 aktualisierten Umgebungen kein Problem, vereinfacht aber die Kommunikation mit dem Service über externe Tools unglaublich! Eventuell ist nämlich der Text den du bekommst einfach komprimiert, aber der Header zeigt es nicht.


Viele Grüße

Niko