Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Prüfen ob eine URL erreichbar ist (kein Download) (https://www.delphipraxis.net/8700-pruefen-ob-eine-url-erreichbar-ist-kein-download.html)

wk_one 10. Sep 2003 14:42


Prüfen ob eine URL erreichbar ist (kein Download)
 
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/unte.../textdatei.txt

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

sakura 10. Sep 2003 14:49

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Statt dem kompletten GET kannst Du eine HEAD Anforderung auf die URL ausführen (Indy Kompos tun dies). Damit wird nur der Header vom Server zurückgeliefert und gemeldet, ob die Seite existiert, vorschoben ist, etc...

...:cat:...

Christian Seehase 10. Sep 2003 14:52

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Moin wk_one,

schau Dir doch mal die API Funktion InternetOpenUrl an.
Vielleicht hilft Dir ja die schon weiter.

wk_one 11. Sep 2003 09:17

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Zitat:

Zitat von sakura
Statt dem kompletten GET kannst Du eine HEAD Anforderung auf die URL ausführen (Indy Kompos tun dies). Damit wird nur der Header vom Server zurückgeliefert und gemeldet, ob die Seite existiert, vorschoben ist, etc...

...:cat:...


Habe beschlossen Sakuras Variante zu probieren.
ich versuche das ganze mal mit get. Das funktioniert auch solange es die URL gibt.
Hier der Code:

Code:
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?

Nalincah 11. Sep 2003 09:23

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Warum sagt der bei mir "Undefinierter Bezeichner: 'responseStream'??
Hab neues Projekt gemacht mit IdHTTP1, Edit1 und Button1.In Button1 hab ich deinen Source drin:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    IdHTTP1.Get(edit1.text, responseStream);
  except
    on EIdHTTPProtocolException do
      ausgabe:='Fehler!'+#13#10 + IdHTTP1.ResponseText;
  end;//try
end;

wk_one 11. Sep 2003 09:37

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Zitat:

Zitat von General2003
Warum sagt der bei mir "Undefinierter Bezeichner: 'responseStream'??
Hab neues Projekt gemacht mit IdHTTP1, Edit1 und Button1.In Button1 hab ich deinen Source drin:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    IdHTTP1.Get(edit1.text, responseStream);
  except
    on EIdHTTPProtocolException do
      ausgabe:='Fehler!'+#13#10 + IdHTTP1.ResponseText;
  end;//try
end;

Hab ja nur einen Auszug aus meinem Code gepostet.
So sieht mein code aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  responseStream: TFileStream;
  ausgabe:String;
begin
  responseStream := TFileStream.Create(edit2.text, fmCreate);
  try
    IdHTTP1.Get(edit1.text, responseStream);
  except
    on EIdHTTPProtocolException do
      ausgabe:='Fehler!'+#13#10 + IdHTTP1.ResponseText;
  end;//try
end;
edit2 ist ein weiteres Textfeld in dem Pfad+Dateiname angegeben wird
hab das aus nem Tutorial

sakura 11. Sep 2003 09:40

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Benutze mal anstatt von IdHTTP1.Get die Anweisung IdHTTP1.Head. Damit werden nur die Header geholt, Get holt auch den Inhalt, aber den wolltest Du doch nicht. ;-)

...:cat:...

wk_one 11. Sep 2003 10:14

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Zitat:

Zitat von sakura
Benutze mal anstatt von IdHTTP1.Get die Anweisung IdHTTP1.Head. Damit werden nur die Header geholt, Get holt auch den Inhalt, aber den wolltest Du doch nicht. ;-)

...:cat:...

:D
Stimmt.

Ok, ich hab das so gemacht:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  ausgabe:String;
begin
  try
    IdHTTP1.Head(edit3.text);
  except
    on EIdHTTPProtocolException do
      ausgabe:='Fehler!'+#13#10 + IdHTTP1.ResponseText;
  end;//try
  if (Length(ausgabe)<1) then
    ausgabe:='OK, alles klar'+#13#10 + IdHTTP1.ResponseText;
  ShowMessage(ausgabe);
end;
Das funktioniert auch. Aber leider passiert hier bei Eingabe einer nicht existierender URL das selbe. Ich bekomme ein Eine Fehlermeldung vom System.

Hmmm.. vielleicht sollte ich mal die Anwendung ausserhalb der Entwicklungsumgebung starten.

sakura 11. Sep 2003 10:19

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Du hast einen Exception-Handler geschrieben, der nur auf den Fehlertyp EIdHTTPProtocolException reagiert. Andere gehen ungehindert durch.

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  ausgabe:String;
begin
  try
    IdHTTP1.Head('http://www.nichtda.org/tot.de');
  except
    on EIdHTTPProtocolException do
      ausgabe:='Fehler!'+#13#10 + IdHTTP1.ResponseText;
    [color=#ff0000]// die anderen Fehler
    on E: Exception do
      ausgabe:='Auch ein Fehler (' + E.ClassName + ')!'+#13#10 + E.Message;[/color]
  end;//try
  if (Length(ausgabe)<1) then
    ausgabe:='OK, alles klar'+#13#10 + IdHTTP1.ResponseText;
  ShowMessage(ausgabe);
end;
...:cat:...

StarFire 11. Sep 2003 10:23

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
@ wk_one
Ich liebe Cross-Postings, bei denen man Tips von anderen Foren als eigene Ideen verkauft

StarFire

Christian Seehase 11. Sep 2003 10:23

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Moin wk_one,

ausserdem solltest Du in der IDE mal schauen ob folgende Checkbox markiert ist:

Tools\Debugger Optionen\Sprach-Exceptions CheckBox: Bei Delphi-Exceptions stoppen

wenn ja, werden Exceptions in der IDE auch angezeigt, wenn man try/except benutzt.

Tom 11. Sep 2003 10:28

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
@Christian: Genau diese Lösung kennt man schon aus einem anderen Forum. Damit nicht alles doppelt läuft: Klick.

sakura 11. Sep 2003 10:33

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Das Topic bleibt an dieser Stelle bis auf weiteres offen und wird bitte hier fortgeführt, damit es nicht zu Missverständnissen kommt. Tom hat es auf der anderen Seite bereits geschlossen, um Missverständnissen vorzubeugen.

Danke,
...:cat:...

P.S.: Sie mein letztes Posting!

wk_one 11. Sep 2003 10:42

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Zitat:

Zitat von StarFire
@ wk_one
Ich liebe Cross-Postings, bei denen man Tips von anderen Foren als eigene Ideen verkauft

StarFire

:oops:
ja, schuldig.
Ich hatte es zu dem Zeitpunkt noch nicht probiert.

Jedenfalls funktioniert das so.
Die Anwendung ausserhalb der IDE Strarten.
Dann springt auch kein unerwünschtes Fenster auf.

Diese Idee, um das zu klären, habe ich von einem User aus nem anderen Forum.

Das es nicht so gern gesehen wird wenn man ein Probelm an unterschiedlichen Foren postet hab ich nicht gewusst und hab ehrlichgesagt nicht darüber nachgedacht.

Wenn ich damit jemanden angestoßen habe dann hier ein hochoffizielles SORRY.

Und ein Danke an alle die mir geantwortet haben.

wk_one 12. Sep 2003 10:10

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
Zitat:

Zitat von sakura
Du hast einen Exception-Handler geschrieben, der nur auf den Fehlertyp EIdHTTPProtocolException reagiert. Andere gehen ungehindert durch.

// die anderen Fehler
on E: Exception do
ausgabe:='Auch ein Fehler (' + E.ClassName + ')!'+#13#10 + E.Message;



...:cat:...

Das hab ich erst eingebaut nachdem einmal ein "anderer Fehler" aufgetaucht ist.
Funzt einwandfrei. Super.
Danke.

Thanx auch @ Christian Seehase
Zitat:

Zitat von Christian Seehase
ausserdem solltest Du in der IDE mal schauen ob folgende Checkbox markiert ist:
Tools\Debugger Optionen\Sprach-Exceptions CheckBox: Bei Delphi-Exceptions stoppen
wenn ja, werden Exceptions in der IDE auch angezeigt, wenn man try/except benutzt.


alien288 23. Sep 2005 16:45

Re: Prüfen ob eine URL erreichbar ist (kein Download)
 
hi!

dieser beitrag hat mir schonmal sehr geholfen, doch leider ist das script bei langsamen servern doch recht langsam, und wenn ich dann noch 5-10 links auf einmal checken will, dauert das schon sehr lang (ne minute wirds schon mal sein). besonders bei den urls, die es nicht gibt, lässt die exception sehr lang auf sich warten...

meine frage also, wie lässt sich die abfrage verkürzen? hab nach timeout ausschau gehalten, aba die componente hat wohl kein timeout :(

antifreeze hilft auch nicht, trotz antifreezes friert das programm trotzdem ein, und 'wacht' erst wieda auf (aktualisiert) wenn das script durch ist! Application.Refresh hilft da auch nicht :((

kann mir jemand mit hilfreichen tipps helfen?

danke ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 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