Probleme mit der JSON RPC API - Immer code -32600
-
Hallo @Pippo
ein valider JSON RPC Request hat ein paar Voraussetzungen, unter anderem:
- Es muss sich um einen POST Request handeln
- Der "Content-Type" muss "application/json" lauten
- Bei den übergebenen Daten muss es sich um valides JSON handeln (das muss im Request Body stehen)
In unserem PHP API Client (siehe hier: https://packagist.org/packages/idoit/apiclient#dev-main ) kannst du dir die Header Daten ausgeben lassen. Diese lauten bei mir z.B.
POST /idoit/src/jsonrpc.php HTTP/1.1 Host: localhost User-Agent: idoit/apiclient 0.11-dev Accept: */* Accept-Encoding: application/json Content-Type: application/json X-RPC-Auth-Username: admin X-RPC-Auth-Password: admin Content-Length: 90
(
X-RPC-Auth-*
Header sind nur notwendig, wenn man sich mit einem User anmelden möchte)Viele Grüße
Leo -
Hallo Leo,
Danke dir für deine Antwort.
Deine genannten Punkte sollten alle erfüllt sein:
- Request-Methode ist POST
- Content-Type ist ebenfalls "application/json"
- Der Body den ich oben gepostet habe kommt aus eurer Dokumentation, ich habe ihn aber zur Sicherheit ebenfalls noch validiert und er scheint so korrekt. Deswegen auch meine Fragezeichen bezüglich der Fehlermeldung.
Dein Header-Beispiel hilft hier aber sicher schonmal weiter, ich versuche mal unsere Headers entsprechend anzupassen.
Viele Grüsse,
PippoEDIT: Habe es gerade nochmal versucht und mit den Headers rumgespielt, gleiches Ergebnis
Aufgefallen ist mir noch dass gemäß der Spezifikation nicht "version" sondern "jsonrpc" im Request zwingend notwendig sein soll - aber auch mit dieser Anpassungen stecke ich nach wie vor fest.
-
Bump
Für ein paar gute Tipps / Referenzen bzgl. Troubleshooten wäre ich sehr dankbar!
Danke und Gruss,
Pippo -
Hey @Pippo
ich habe noch mal im Code nachgesehen - die Meldung "Provided request is not a valid json rpc" wird nur in zwei Situationen ausgegeben:
- Wenn der übergebene Request kein "valides" JSON beinhaltet bzw. nicht aus dem Request-Body heraus dekodiert werden konnte (siehe JSON lint)
- Wenn das dekodierte JSON kein Array ist
Ich denke den zweiten Fall können wir ausschließen, denn dein gegebener Payload ist sowohl valides JSON als auch ein Array. Es kann also eigentlich nur noch der Fall sein, das dieses nicht als Request Body übergeben wird
Hast du mal im i-doit den API Log auf "debug" geschaltet und nach dem Request geschaut was im
{i-doit}/log
Verzeichnis geschrieben wird?Viele Grüße
Leo -
Hallo Pippo,
ich habe das gleiche Problem :
[E] Error code: -32600 message: Invalid request : This is not a JSON-RPC. The content-type should be application/json, request method should be "post" and the http body should be a valid json-rpc 2.0 package.Leider wird kein Logfile geschrieben.
Hast Du mittlerweile eine Lösung gefunden?
Gruß
Norbert -
Hallo Norbert,
Bin leider auch noch nicht viel weiter gekommen da ich mir erst den Zugriff auf unsere i-doit Umgebung organisieren muss. Dass meine Requests gegenüber der Demo-Umgebung von i-doit ebenfalls mit der gleichen Fehlermeldung abgelehnt werden und bei dir kein Log geschrieben wird, stimmt mich aber nicht zuversichtlich wieviel ich da rausholen werden kann
Schlimmstenfalls muss ich kurz was lokales hochfahren und dagegen testen, für das fehlt mir aber im Moment die Zeit. Falls du noch was rausfindest bin ich ganz Ohr!
Gruss,
Pippo -
Hallo zusammen,
ich habe noch eine Frage - wie genau schickt ihr eure Requests ab? Wenn man die Requests z.B. über die Konsole (via
curl
) abschickt kann es sein das die"
verloren gehen, sodass aus:{"jsonrpc":"2.0","method":"cmdb.object.create","params":{"type":"C__OBJTYPE__SERVER","title":"My little server","apikey":"api-key"},"id":1}
Sowas wird wie:
{jsonrpc:2.0,method:cmdb.object.create,params:{type:C__OBJTYPE__SERVER,title:My little server,apikey:api-key},id:1}
Und das endet in einer "Syntax error, malformed JSON" Fehlermeldung, die dann wiederum vom System abgefangen und durch "Invalid request : Provided request is not a valid json rpc." ersetzt wird.
Habt ihr andere Tools ausprobiert wie z.B. https://www.postman.com/ ?
VG Leo
-
Hallo Leo,
Kleines Update von mir: Ursprünglich hatte ich es mit Postman versucht und bin da nicht weitergekommen. Mittlerweile evaluieren wir Alternativen und bin dabei auf Bruno gestossen und siehe da, jetzt funktionierts... sowohl bei eurer Demo-Umgebung als auch bei unserer On-Prem Version.
Ich kann mir aber immer noch nicht erklären woran es gelegen ist, vielleicht bist du aber mit deinem Verdacht schon ziemlich nahe. Ich weiss nicht wie Postman das Ganze handelt und ob es dort mit dem Encoding Probleme geben kann. Ich bin mir aber auch ziemlich sicher dass ichs über cURL ebenfalls versucht hatte und die gleiche Fehlermeldung bekommen hatte - vielleicht benutzt Postman(Desktop) cURL im Hintergrund und hat die Zeichen weggestrippt?
Mit Bruno scheint es jetzt bei uns zu laufen - Holz anfassen!
Aber vielen Dank fürs weitere Nachforschen!
@n0v0s
Vielleicht kannst du ja was mit dieser Info anfangen. -
Hey @Pippo
alles klar - merkwürdig... Aber vielleicht ist es tatsächlich so? Ich habe für die nächste API Version eine kleine Änderung vorgesehen, die dann etwas genauer erklärt was nicht stimmt Das sollte dann helfen!
VG Leo
-
Super Sache, genauere Fehlermeldungen sind natürlich immer gerne gesehen!
Danke nochmals fürs Helfen.
Grüsse,
Pippo -