AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy Response Body bei EIdHTTPProtocolexception auswerten
Thema durchsuchen
Ansicht
Themen-Optionen

Indy Response Body bei EIdHTTPProtocolexception auswerten

Ein Thema von Codehunter · begonnen am 17. Jul 2018 · letzter Beitrag vom 17. Jul 2018
Antwort Antwort
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Indy Response Body bei EIdHTTPProtocolexception auswerten

  Alt 17. Jul 2018, 15:37
Hallo!

Ich habe das Problem, dass ich mit Indy einen PUT-Request an einen REST-Service absetze. Wenn an dem Request etwas nicht stimmt, antwortet der Server mit einem HTTP-Statuscode 400 (Bad Request). Soweit auch noch ok.

Der TIdHTTP jedoch wirft dann jedoch eine EIdHTTPProtocolexception und gibt den Responsebody nicht zurück. Den bräuchte ich aber, weil darin in JSON-Form Details zum aufgetretenen Fehler enthalten sind.

Jemand eine Idee, wie ich in diesem Fall an den Responsebody kommen kann?

Grüße
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#2

AW: Indy Response Body bei EIdHTTPProtocolexception auswerten

  Alt 17. Jul 2018, 15:45
Hmm..

über die HTTPOptions:
(Auszug aus nem Source, bei dem ich auch selber machen will)

Delphi-Quellcode:
var
 O : TIdHTTPOptions;
...

    // Damit wir selber den ErrorCode verarbeiten können.
    O := Http.HTTPOptions;
    include(O, hoNoProtocolErrorException);
    include(O, hoWantProtocolErrorContent);
    Http.HTTPOptions := O;
(Verwende D6 mit Indy 10.6.2.0)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Indy Response Body bei EIdHTTPProtocolexception auswerten

  Alt 17. Jul 2018, 15:52
Delphi-Quellcode:
var
 O : TIdHTTPOptions;
...

    // Damit wir selber den ErrorCode verarbeiten können.
    O := Http.HTTPOptions;
    include(O, hoNoProtocolErrorException);
    include(O, hoWantProtocolErrorContent);
    Http.HTTPOptions := O;
(Verwende D6 mit Indy 10.6.2.0)
Geht auch kürzer:

FHTTP.HTTPOptions := FHTTP.HTTPOptions + [hoNoProtocolErrorException, hoWantProtocolErrorContent];

Aber leider leider: FHTTP.Put liefert dann zwar keine Exception mehr, aber auch keinen Inhalt im Rückgabestring. Es ist aber Inhalt da, das habe ich mit apitester.com geprüft.

EDIT: Fehler gefunden. Dein Hinweis war richtig, nur wurden die HTTPOptions an anderer Stelle noch mal überschrieben. Funktioniert und Problem gelöst. Danke dir!
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (17. Jul 2018 um 16:08 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Indy Response Body bei EIdHTTPProtocolexception auswerten

  Alt 17. Jul 2018, 16:51
oder ohne die options zu verändern, indem man einen Handler für die EIdHTTPProtocolException schreibt in dem man auf die ErrorMessage zugreifen kann:

Delphi-Quellcode:
    try
      ...
    except
      on E: EIdHTTPProtocolException do
      begin
        WriteLn(E.Message);
        WriteLn(E.ErrorMessage);
      end;
      on E: Exception do
      begin
        WriteLn(E.Message);
      end;
    end;
Quelle: https://mikejustin.wordpress.com/201...-6-https-post/
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Indy Response Body bei EIdHTTPProtocolexception auswerten

  Alt 17. Jul 2018, 17:15
MessageBody <> ErrorMessage! Ersteres enthält JSON-Daten, letzteres "Bad Request". Aber siehe Edit oben: Problem gelöst.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Indy Response Body bei EIdHTTPProtocolexception auswerten

  Alt 17. Jul 2018, 18:23
MessageBody <> ErrorMessage! Ersteres enthält JSON-Daten, letzteres "Bad Request". Aber siehe Edit oben: Problem gelöst.
Der Responsebody (JSON-Daten) steht in E.ErrorMessage, und die Fehlermeldung ("Bad Request") in E.Message. Ich habe es nicht mit der aktuellen Indy-Version getestet, aber es war so als (alternative) Lösung von Remy Lebeau implementiert und hat funktioniert.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Indy Response Body bei EIdHTTPProtocolexception auswerten

  Alt 17. Jul 2018, 19:41
Bei mir stand in der E.ErrorMessage das Bad Request drin, E.Message war leer. Aber egal, mit den Options funktioniert es wunderbar. Den Fehlercode cann ich ja genauso gut über TIdhTTP.ResponseCode abfragen.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  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 21:44 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