Einzelnen Beitrag anzeigen

Crocotronic

Registriert seit: 9. Mai 2013
258 Beiträge
 
#3

AW: JSON mit Indy verschicken -> Fehler

  Alt 20. Feb 2015, 15:51
Okay, das erklärt einiges, vielen Dank!

Wenn ich das nun mit dem Stream mache, bekomme ich wieder ein Error vom Server, mit dem kann ich aber noch weniger anfangen
Erstmal der überarbeitete Code:
Delphi-Quellcode:
procedure SaveStringToStream(AStream: TStream; AString: String);
var
  aStrLen: Integer;
begin
  aStrLen := Length(AString);
  AStream.WriteBuffer(aStrLen, SizeOf(Integer)); // <-- weglassen!
  AStream.WriteBuffer(Pointer(AString)^, aStrLen);
end;

procedure TForm1.Button1Click(Sender: TObject);
var Stream: TMemoryStream;
begin
 Stream:= TMemoryStream.Create;
 SaveStringToStream(Stream,'{"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';

 Stream.Seek(0, soFromBeginning);
 showmessage(IdHTTP1.Post('https://test.de/jsonrpc.do', Stream));

 Stream.Free;
end;
Folgende Antwort:
Code:
{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"Parse error: Invalid UTF-32 character 0x6469227b(above 10ffff) at char #1, byte #7)"}}
Die selbe Rückmeldung bekomme ich auch wenn ich totalen Mist hinschicke.

EDIT: Okay, hab meinen Fehler gefunden. Anscheinend darf die Länge des Strings nicht im Stream gespeichert werden. Funktioniert nun super, vielen Dank Michael!

Geändert von Crocotronic (20. Feb 2015 um 16:08 Uhr)
  Mit Zitat antworten Zitat