Es wird also nur zwei mal der POST Befehl mit identischen Daten gesendet, d.h. zwei mal CmdUpdateClick ausgeführt?
Edit: sorry, habe die globale Variable "jo" entdeckt. Diese ist in beiden POSTs vermutlich nicht gleich?
Anstatt den Umweg über Utf8Encode zu gehen kann man direkt das Encoding des TStringStreams angeben:
RequestBody := TStringStream.Create(jo, TEncoding.UTF8);
Der SSL SocketHandler kann auch mit der HTTP Komponente als Owner erzeugt werden, dadurch spart man das Close und Free ein:
IdHTTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
Edit:
Bei neueren
Indy Versionen muss man den SSL Handler nicht mehr erzeugen, IdHTTP macht das dann für HTTPS Urls automatisch.