Entwickler-Ecke

Internet / Netzwerk - Prüfen ob eine URL erreichbar ist


wk_one - Mi 10.09.03 15:27
Titel: Prüfen ob eine URL erreichbar ist
Hallo,

ich möchte ein kleines Tool bauen das eine Liste von Internetlinks auf Erreichbarkeit prüft.
Links wie
http://www.google.de
oder
http://www.irgeneinwebserver.de/unterverzeichnis/textdatei.txt

Gibt es eine Funktion der ich den Link übergebe und diese mir zurückgibt ob das Ziel existiert bzw. erreichbar ist?


Tino - Mi 10.09.03 17:44

Hallo,

was heißt denn für dich ob das Ziel erreichbar ist oder nicht?

Eventl. reicht es ja ein Suche in: Delphi-Forum, Delphi-Library PING zu senden.

Gruß
Tino


matze - Mi 10.09.03 20:24

und wenn du prüfen willst ob die datei existiert, dann frag via INDY die grösse ab !


wk_one - Do 11.09.03 08:48

Tino hat folgendes geschrieben:
Hallo,

was heißt denn für dich ob das Ziel erreichbar ist oder nicht?

Eventl. reicht es ja ein Suche in: Delphi-Forum, Delphi-Library PING zu senden.

Gruß
Tino


Sorry, vielleicht hab ich mich falsch ausgedrückt.
Ein Ping würde ja nur schauen ob ein Host erreichbar ist.

Was ich prüfen will ist ob z.b. eine bestimmte Textdatei auf einem Server vorhanden ist. z.B. http://www.irgendeinhost.de/readme.txt


JustusJonas - Do 11.09.03 09:24

Navigiere doch einfach mit einem WebBrowser dorthin und frage den ReadyState ab!

Greetz


wk_one - Do 11.09.03 10:21

matze hat folgendes geschrieben:
und wenn du prüfen willst ob die datei existiert, dann frag via INDY die grösse ab !


ich versuche das ganze mal mit Indy + get. Das funktioniert auch solange es die URL gibt.
Hier der Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
try
    IdHTTP1.Get(edit1.text, responseStream);
  except
    on EIdHTTPProtocolException do
      ausgabe:='Fehler!'+#13#10 + IdHTTP1.ResponseText;
  end;//try

edit1 ist ein eingabefeld in dem die URL steht.
Wenn nun eine URL eingegeben wird die es nicht gibt, dann bricht das Programm ab und bringt eine Fehlermeldung.
Das soll es aber nicht. In Fehlerfällen soll es eine Meldung in die Variable ausgabe schreiben.

Wie schaffe ich es das Fenster mit der Fehlermeldung zu unterdrücken?
Irgendwelche Tipps?


wk_one - Do 11.09.03 10:28

JustusJonas hat folgendes geschrieben:
Navigiere doch einfach mit einem WebBrowser dorthin und frage den ReadyState ab!

Greetz


wie?


JustusJonas - Do 11.09.03 11:12

Die Hilfe von Delphi könnte dir mehr über "ReadyState" verraten!


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Die Eigenschaft ReadyState gibt den Status der Komponente an.

property ReadyState: TOleEnum;

Beschreibung

Mit ReadyState rufen Sie Statusinformationen über die TWebBrowser-Komponente ab. Dadurch können Sie beispielsweise verhindern, daß die Komponente verwendet wird, wenn sie auf eine Aktion nicht vorbereitet ist.

Die Eigenschaft kann folgende Werte annehmen:

Konstante  Wert  Beschreibung

READYSTATE_UNINITIALIZED  0  Standard-Initialisierungsstatus. Das Steuerelement hat noch nicht mit dem Laden seiner Eigenschaften begonnen.

READYSTATE_LOADING  1  Das Steuerelement lädt seine Eigenschaften.
READYSTATE_LOADED  2  Das Steuerelement hat seine Eigenschaften initialisiert, ist aber noch nicht interaktiv.
READYSTATE_INTERACTIVE  3  Das Steuerelement ist interaktiv. Es sind aber noch nicht alle Daten verfügbar (ein Dokument oder Frame wird gerade geladen).
READYSTATE_COMPLETE  4  Das Steuerelement ist interaktiv, und seine gesamten Daten sind verfügbar (das aktuelle Dokument ist vollständig geladen).


So navigierst du mit dem WebBrowser:

Delphi-Quelltext
1:
WebBrowser1.Navigate('http://irgendwas.com/test.txt');                    


So könntest du z. B. den ReadyState abfragen!

Delphi-Quelltext
1:
if WebBrowser1.ReadyState = 4 then ShowMessage('File existiert'else ShowMessage('File nicht gefunden');                    


Greetz


wk_one - Do 11.09.03 11:19
Titel: Gelöst
Danke euch allen für eure Mühen.

Hab das nun folgendermaßen gelöst:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
try
    IdHTTP1.Head(edit3.text);
  except
    on EIdHTTPProtocolException do
      ausgabe:='Fehler!'+#13#10 + IdHTTP1.ResponseText;
  end;//try
  if (Length(ausgabe)<1then
    ausgabe:='OK, alles klar'+#13#10 + IdHTTP1.ResponseText;
  ...
  ...


Vielen dank nochmal an alle :D

übrigens....
auf diese Lösung bin ich mit Hilfe aus Beiträgen anderer Foren gekommen. [http://www.delphi-groups.de/YaBBSe/index.php?board=3;action=display;threadid=16933]
Hatte mir keine Gedanken darüber gemacht, das es nicht gern gesehen wird wenn man ein Problem in mehreren Foren bespricht. Sorry.
Ich erwähne das, weil ich verhindern will dass sich jemand hintergangen fühlt.

Nochmals vielen Dank für die Mithilfe.