![]() |
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:
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?
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; 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 |
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:
Der Klassenname der Exception wird mitgeloggt, denn dieser ist für die Fehlersuche durchaus interessant.
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; |
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? |
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:
Du kannst dann entweder die Indy-Sourcen "reparieren", auf aktuellere Sourcen von Indy hoffen oder EIdHTTPProtocolException gezielt abfangen und eine eigene Meldung einfügen.
raise EIdHTTPProtocolException.Create('');
|
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