Hallo,
ich scheitere zurzeit am Verschicken eines JSON-Objekts. Die Schnittstele ist hierbei JSON-RPC und die Verbindung wird verschlüsselt.
Mein Code zum wegschicken sieht folgendermaßen aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var sl: TStringList;
begin
sl:= TStringList.Create;
sl.Text:= '{"id":"ID","method":"authenticate","params":{"user":"USER","password":"PASSWORD"},"jsonrpc":"2.0"}';
IdHTTP1.IOHandler:= IdSSLIOHandlerSocketOpenSSL1;
IdHTTP1.Request.ContentType:= 'application/json-rpc';
IdHTTP1.Request.Connection:= 'Keep-Alive';
IdHTTP1.Request.ContentLength:= Length(sl.Text)* SizeOf(Char);
IdHTTP1.Request.ContentEncoding := 'utf-8';
showmessage(IdHTTP1.Post('https://www.test.de/jsonrpc.do', sl, IndyTextEncoding(encUTF8)));
sl.Free;
end;
Als Antwort bekomme ich jedesmal:
Code:
{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"Parse error: Unexpected character ('%' (code 37)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')\n at [Source: org.apache.catalina.connector.CoyoteInputStream@2bcf7275; line: 1, column: 2]"}}
Es sieht so aus, als würde
Indy irgendwo ein '%' in den Request basteln.
Ich habe herausgefunden, dass sobald aber am Anfang ein Sonderzeichen steht, wie z.B. '{', '"' oder '&', antwortet mir der Server mit der oben beschriebenen Nachricht, dass unerwarteterweise ein '%' gefunden wurde.
Ich hätte ja sofort gedacht, dass da die Zeichensätze nicht übereinstimmen, aber in der Post-Funktion gebe ich ja explizit den UTF-8-Encoder mit.
Ich hoffe, es kann mir jemand helfen!
Viele Grüße
Croco