JSON & Indy 2. Aufruf bringt 502 Bad Gateway
Hallo Zusammen,
langsam verzweifel ich an dem Problem. Ich muss an einen HTTPS Server ein JSON formatierte Daten versenden und bekomme von dem Server dann eine ID zurück. Beim ersten Post gehts wunderbar, alles toll. Jedoch beim 2. Post bekomme ich immer einen 502 Bad Request zurück. Jemand eine Idee woran das liegen könnte? In jo befindet sich das JSON Object. Ich würde auch ein anderes Object als INDY nehmen. Kostenpflichtig wäre kein Problem. Ich finde leider nichts sinnvolles... Delphi XE7 Indy 10.6.1 Hier der Code der Subroutine:
Code:
für jede Idee oder Hilfe wäre ich sehr dankbar!
procedure TForm1.CmdUpdateClick(Sender: TObject);
var SendString : TStringStream; RcvString : TStringStream; IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL; IdHTTP1: TIdHTTP; begin IdHTTP1 := TIdHTTP.Create(); IdSSLIOHandlerSocketOpenSSL1 := TIdSSLIOHandlerSocketOpenSSL.Create(); IdHTTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; IdHTTP1.Request.Accept := 'application/json'; IdHTTP1.Request.AcceptEncoding := 'utf-8'; IdHTTP1.Request.ContentEncoding := 'utf-8'; IdHTTP1.Request.ContentType := 'application/json'; IdHTTP1.HttpOptions := [hoNoProtocolErrorException]; RcvString := TStringStream.Create; try SendString := TStringStream.Create(UTF8Encode(jo.ToString)); try IdHTTP1.Post('https://www.egym.de/egym-rest/gymapi/user/publish?' + apiAccessKey, SendString, RcvString); except // Tue nichts, springe nur raus... end; finally SendString.Free; end; Memo1.Lines.Clear; Memo1.Lines.Add(Format('Response Code: %d', [IdHTTP1.ResponseCode])); Memo1.Lines.Add(Format('Response Text: %s', [IdHTTP1.ResponseText])); Memo1.Text := AdsData.FieldByName('eMail').AsString + ' erl. ID: "' + RcvString.DataString + '"'; IdStr := RcvString.DataString; RcvString.Free; IdSSLIOHandlerSocketOpenSSL1.Close; idHTTP1.Disconnect; IdSSLIOHandlerSocketOpenSSL1.Free; IdHTTP1.Free; Stefan |
AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway
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:
Delphi-Quellcode:
Der SSL SocketHandler kann auch mit der HTTP Komponente als Owner erzeugt werden, dadurch spart man das Close und Free ein:
RequestBody := TStringStream.Create(jo, TEncoding.UTF8);
Delphi-Quellcode:
Edit:
IdHTTP1.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
Bei neueren Indy Versionen muss man den SSL Handler nicht mehr erzeugen, IdHTTP macht das dann für HTTPS Urls automatisch. |
AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway
Was denn nun? HTTP 400 ist "Bad Request", HTTP 502 ist "Bad Gateway"...
Außerdem: Ich weiß ja nicht WAS du verschickst, aber wenn du z.B. zwei mal das gleiche schickst ist es vom Protokoll her vielleicht auch völlig legitim das zu verweigern? |
AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway
@ mjustin Danke
@ Der schöne Günther Sorry! Mein Fehler! 502 Bad Gateway! In beiden Fällen ist der Inhalt von jo unterschiedlich! Es handelt sich jedesmal um ein paar Strings und ein Foto (Binary). Das sind Personendaten (ID; Adresse usw.) die an die Online App übertragen werden. Aktuell behelfe ich mir so das ich beim 2 Aufruf mein Programm einfach neustarte. Dabei funktionierts dann wieder genau einmal. |
AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway
Zitat:
|
AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway
Habe jetzt etwas anders gemacht.
Ich lösche das TJSONObject (jo) nicht mehr, sondern löse es mit RemovePair wieder auf, dass es am Ende leer ist = "{}" und fülle es einfach wieder neu. Es scheint wohl in der Implementierung der System.JSON von Delphi ein Fehler bei der Auflösung zu sein. Der 502 Bad Gateway Fehler erscheint jetzt nicht mehr. Dafür "sammelt" das Programm jetzt Speicher. :twisted: Ist zwar unschön aber die Workstation wird eh jede Nacht neugestartet. Werde das jetzt mal beobachten wieviel Speicher sich ansammelt. Beim Ansehen des JSON OBjects war übrigens nichts zu sehen! Alles sah vollkommen normal aus! Danke Euch jedenfalls für die Ideen! :thumb: Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz