AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdHTTP Exception-Meldung ohne Inhalt
Thema durchsuchen
Ansicht
Themen-Optionen

TIdHTTP Exception-Meldung ohne Inhalt

Ein Thema von KoS · begonnen am 17. Apr 2007 · letzter Beitrag vom 17. Apr 2007
Antwort Antwort
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#1

TIdHTTP Exception-Meldung ohne Inhalt

  Alt 17. Apr 2007, 10:49
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: TIdHTTP Exception-Meldung ohne Inhalt

  Alt 17. Apr 2007, 11:19
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.
Andreas
  Mit Zitat antworten Zitat
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#3

Re: TIdHTTP Exception-Meldung ohne Inhalt

  Alt 17. Apr 2007, 14:08
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: TIdHTTP Exception-Meldung ohne Inhalt

  Alt 17. Apr 2007, 14:54
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:
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.
Andreas
  Mit Zitat antworten Zitat
KoS

Registriert seit: 9. Jun 2006
55 Beiträge
 
#5

Re: TIdHTTP Exception-Meldung ohne Inhalt

  Alt 17. Apr 2007, 14:57
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.
  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:59 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