Ich solle per Rest eine Json-Objekt per Post an einen Server schicken. Beispiele zum empfangen von Json-Objekten gibts viele... zum Senden nicht.
Von derem Server kommt immer zurück "invalid json primitive".
Verwundert bin ich obwohl in der Komponenten ContentType := 'application/json' ist der ContentType nach dem execute wieder "application/x-www-form-urlencoded" Das passiert auch wenn ich im Designer den Requset per Hand ausführe
"application/x-www-form-urlencoded" ist normal, wenn ein POST-Request mit gefüllten Feldern (Eingabefelder) verwendet wird.
Bei REST wird ein POST-Request ohne Felder verwendet sondern einfach als Payload. Feldnamen braucht man ja auch nicht, steckt ja im JSON drin. Gesendet werden folgende Dinge via
TCP: HTTP-Header, zwei Windows-Absätze, JSON-String. Kann man theoretisch auch einfach von Hand machen. Komplettes Programm (nicht geprüft, da hier mal eben im Editor geschrieben):
Delphi-Quellcode:
var
TCP: TIdTCPClient;
Header: AnsiString;
Payload: RawByteString;
begin
Payload := UTF8Encode(JSON);
Header := '
POST / HTTP/1.0'#13#10'
Host: example.com'#13#10'
Content-Type: application/json'#13#10'
Content-Length: ' + IntToStr(Length(Payload)) + #13#10'
IRGENDWELCHE HEADER HIER'#13#10#13#10;
TCP := TIdTCPClient.Create();
TCP.Host := '
127.0.0.1';
TCP.Port := 80;
TCP.Connect();
TCP.IOHandler.
Write(Header[1], Length(Header));
TCP.IOHandler.
Write(Payload[1], Length(Payload));
Result :=
TCP.IOHandler.AllData();
end;