AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke JSON & Indy 2. Aufruf bringt 502 Bad Gateway
Thema durchsuchen
Ansicht
Themen-Optionen

JSON & Indy 2. Aufruf bringt 502 Bad Gateway

Ein Thema von Supergr · begonnen am 23. Okt 2017 · letzter Beitrag vom 23. Okt 2017
Antwort Antwort
Supergr

Registriert seit: 8. Feb 2012
12 Beiträge
 
#1

JSON & Indy 2. Aufruf bringt 502 Bad Gateway

  Alt 23. Okt 2017, 10:34
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:
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;
für jede Idee oder Hilfe wäre ich sehr dankbar!

Stefan

Geändert von Supergr (23. Okt 2017 um 10:57 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#2

AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway

  Alt 23. Okt 2017, 12:17
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.
Michael Justin

Geändert von mjustin (23. Okt 2017 um 12:34 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway

  Alt 23. Okt 2017, 12:32
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?

Geändert von Der schöne Günther (23. Okt 2017 um 12:35 Uhr)
  Mit Zitat antworten Zitat
Supergr

Registriert seit: 8. Feb 2012
12 Beiträge
 
#4

AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway

  Alt 23. Okt 2017, 13:30
@ 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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway

  Alt 23. Okt 2017, 13:48
In beiden Fällen ist der Inhalt von jo unterschiedlich!
Lass dir doch beide Strings mal ausgeben und prüfe doch erstmal, ob das valide ist.
  Mit Zitat antworten Zitat
Supergr

Registriert seit: 8. Feb 2012
12 Beiträge
 
#6

AW: JSON & Indy 2. Aufruf bringt 502 Bad Gateway

  Alt 23. Okt 2017, 15:16
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. 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!

Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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