Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdHTTP Exception-Meldung ohne Inhalt (https://www.delphipraxis.net/90417-tidhttp-exception-meldung-ohne-inhalt.html)

KoS 17. Apr 2007 09:49


TIdHTTP Exception-Meldung ohne Inhalt
 
Hallo,

ich hab irgendwie ein Problem mit der IdHTTP Komponente von Indy, und zwar hab ich ein Programm das verschiedene WebSeiten mittels der IdHTTP aufruft. Diese Aufrufe erfolgen über eine Funktion die wie folgt aussieht:
Delphi-Quellcode:
function GetPage(const AURL: string; ACount: integer) : string;
var html : string;
begin
    if not Assigned(Server) then
        CreateHTTPClient;

    try
        Server.Disconnect; // Vor der Anfrage pauschal immer Trennen,
                           // damit Verbindung immer neu erstellt wird
        html := Server.Get(AURL);
        Result := html
    except
      on E: Exception do
          begin
              Delay(1000);
              WriteLog('#EXCEPT(GetPage('+AURL+', '+IntToStr(ACount)+'): '+E.Message);
              if (ACount < MaxTries) then
                  begin
                      Delay(4000);
                      Result := GetPage(AURL, ACount+1);
                  end;
          end;
    end;
end;
Nun das Problem, ab und zu erhalte ich ein Exception, jedoch ohne das etwas in E.Message drin steht, woran könnte das liegen, bzw. was wäre das dann für ein Fehler?
Es ist nicht so das ich überhaupt keine Fehlerausgabe über E.Message erhalten, denn ab und zu bekomm ich auch mal ein "Connection reset by peer", von daher sollte es hier eigentlich kein direkten Fehler geben.
Ich weiß nicht wo ich hier zur Fehlerbehebung/Analyse ansetzten soll, da wie gesagt das Except auch nur ab und zu ausgelöst wird und das beim Aufruf der selben URL.

Ich würde mich freuen wenn mir jemand bei dem Problem helfen könnte.

Gruß KoS

shmia 17. Apr 2007 10:19

Re: TIdHTTP Exception-Meldung ohne Inhalt
 
Dein "Trick", um den download mehrfach zu versuchen ist nicht 100% sauber.
Die Exception ist noch nicht korrekt behandelt und schon gehst du rekursiv in die nächste Runde.
Deshalb:
Delphi-Quellcode:
function GetPage(const AURL: string) : string;
var ACount: integer;
begin
  if not Assigned(Server) then
     CreateHTTPClient;

  for ACount := 1 to MaxTries do
  begin
    try
        Server.Disconnect; // Vor der Anfrage pauschal immer Trennen,
                           // damit Verbindung immer neu erstellt wird
        result := Server.Get(AURL);
        Exit; // wir sind fertig !!
    except
      on E: Exception do
          begin
              WriteLog('#EXCEPT(GetPage('+AURL+', '+IntToStr(ACount)+'): '+E.ClassName+'-'+E.Message);
          end;
    end;
    Delay(4000); // Pause
  end;
  Result := 'unable to load: '+AURL;
  WriteLog(Result);
end;
Der Klassenname der Exception wird mitgeloggt, denn dieser ist für die Fehlersuche durchaus interessant.

KoS 17. Apr 2007 13:08

Re: TIdHTTP Exception-Meldung ohne Inhalt
 
Hallo,

hab mal meine Funktion nach den Angaben von shmia entsprechend umgebaut.
Ich hab jedoch immer noch den Fehler mit der leeren Exception.Message. Allerdings kann ich jetzt auch sagen von welcher ClassName das kommt: EIdHTTPProtocolException
Bringt uns das irgendwie weiter?

shmia 17. Apr 2007 13:54

Re: TIdHTTP Exception-Meldung ohne Inhalt
 
Mit EIdHTTPProtocolException kannst du nun in den Sourcen von Indy suchen, ob es vielleicht irgendwo eine Stelle
gibt, an der diese Exception mit raise ausgelöst wird, aber keine Message mitgegeben wird.
Das könnte so aussehen:
Delphi-Quellcode:
raise EIdHTTPProtocolException.Create('');
Du kannst dann entweder die Indy-Sourcen "reparieren", auf aktuellere Sourcen von Indy hoffen oder EIdHTTPProtocolException gezielt abfangen und eine eigene Meldung einfügen.

KoS 17. Apr 2007 13:57

Re: TIdHTTP Exception-Meldung ohne Inhalt
 
Hmm also das mit dem Abfangen und selbst ne Meldung setzten bringt mir ja in sofern ja auch nichts, es geht mir ja darum zum einen warum überhaupt die Verbindung "abgebrochen" oder was auch immer dort passiert ist und zum anderen wie ich das dann entsprechend beheben kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz