Entwickler-Ecke

Internet / Netzwerk - URL auf erreichbarkeit testen


G-man - Di 17.02.04 16:06
Titel: URL auf erreichbarkeit testen
Moin,
weiß jemand, wie man eine URL auf erreichbarkeit testen kann (am besten mit WinIet, muss aber nicht sein).
Mit Java gab es da einfach den Typ URL, der dann die Verbindung aufgebaut hat und falls das nicht klappte konnte man dann per exeption halt heraus bekommen, ob die URL zu erreichen war.


Chatfix - Di 17.02.04 16:13

mach doch einfach einen Ping auf die URL ;)


G-man - Di 17.02.04 16:27

Und wie pinge ich die URL mit Delphi an?


Martin77 - Di 17.02.04 16:33

Machs mit den Indys,


Delphi-Quelltext
1:
IdHttp1.get('dieURL');                    


Ist meiner Meinung nach am einfachsten, kannste dich natürlich auch mit der API auseinander setzen.
Glaube bei den Indys war auch eine "CheckHost" Komponente bei, weiss aber nicht genau , oder ob ich mich verlesen habe

Gruß Martin


Chatfix - Di 17.02.04 16:35

Z.B. mit der DF-Suche...

http://www.delphi-forum.de/viewtopic.php?t=14794&highlight=ping

Statt der IP, einfach die URL angeben...

Ich glaube aber damit kannst du nur die domain anpingen, nicht aber untergeordnete seiten...
vielleicht hat ja noch jmd eine bessere möglichkeit


G-man - Di 17.02.04 17:30

Mich würden halt auch untergeordnete Seiten interessieren. Wenn das aber aus irgendeinem Grund nicht gehen sollte, muss ich wohl mit der vorgeschlagenen Lösung vorlieb nehmen.


Martin77 - Di 17.02.04 17:40

hier wirft jemand was durcheinander. 1. Du kannst keine Webseite anpingen. Du kannst nur einen Host anpingen -> das das zufällig nen Webserver draufläuft ist ja schön. 2. Unterseiten der Seite oder SubDomain, weil unterseiten anpingen ist ja nicht möglich.


Folgendes Szenario: Dein Hoster macht ein Update des Webservers. in dem Moment ist deine Webseite(!!!) nicht erreichbar, der DOmainname würde allerdingsauf einen Ping antworten.

Da du sagst das du auch gerne auf "unterseiten" zugreifen willst folgere ich mal richtig daraus das die eine Webseite meinst, und damit ist der Ping nicht möglich. Also musste die Seite herunterladen -> Indy oder ähnliche Kompos.


Gruß Martin


P.S. Wehe jetzt kommt einer und sagt ich kann die Subdomain auch auf nen Unterordner legen: Das stimtm schon trotzdem führt der aufgelöste Hostname zur IP Adresse der eigentlich Domain.


G-man - Di 17.02.04 18:04

Dann wüsste ich aber gerne, wie das der Java-URL typ macht, ohne eine Datei zu Downloaden.


Martin77 - Di 17.02.04 18:11

Ich würde sagen auch der läd die Seite herunter, oder er versucht nen Connect auf Port 80 was für diesen Zweck ausreichend ist. Wenn es ein normaler wäre. hätteste auch eher nen Typ "Hostname" anstelle von "URL"

Gruß Martin

P.S.

Wer sagt dir das der Typ URL keine Seite herunterläd? ich kann dir auch eine Klasse machen, die intern die Datei downloadet und dir nix davon mitteilt, aber daraufhin dir mitteilt ob der Webserver erreichbar ist oder nicht.


G-man - Di 17.02.04 18:33

Dann ziehst du die Datei wohl runter, uns löscht sie danach wieder, oder wie würdest du es machen?


Martin77 - Di 17.02.04 18:39

Über die Get Methode bekommst du den Quelltext der Webseite, zur not einen leeren String, aber du bekommst halt auch Exceptions je nachdem was passiert ist.


Martin


G-man - Di 17.02.04 18:41

Kannst du das mal mit einem Quelltextausschnitt demonstrieren?.


Martin77 - Di 17.02.04 19:02

beispiel steht zwar oben schon, aber hier nochmal:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
  sTemp: string;
begin
  try
    sTemp:= IdHTTP1.Get('http://www.delphi-forum.de');
  except
    on E: Exception do
      ShowMessage('URL nicht erreichbar');
  end;
end;



Wegen der Exception musste mal gucken, ob du unterschieden willst was genau schiefgegangen ist, oder ob dir die Info reicht "irgendwas" ist schief gegangen.


Gruß Martin


G-man - Di 24.02.04 17:23

Ich habe eine alternative Lösung gefunden:
(mit der Unit WinINET) QueryInfo und dann mit LastError den 404 Error abfangen, falls einer existiert.


Martin77 - Di 24.02.04 20:26

bedenke: 404 ist nru der Fehler wenn die Seite nicht existiert, es können ja auch andere Fehler auftreten. z.B. nen Timeout wenn der Webserver nicht antwortet,....


DeCodeGuru - Di 24.02.04 20:51

genau so eine Funktion habe ich vor ca. 20 Minuten benötigt und auf meiner HD gefunden. Hier der Code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
function CheckAvailability(URL: String): Boolean;
var
  Session, thefile: hInternet;
  index,CodeLength: cardinal;
  Code: array[1..20of Char;
  res: PChar;
begin
  Result := False;
  Session := InternetOpen('InetURL:/1.0',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
  if Assigned(session) then
  begin
    thefile := InternetOpenUrl(session, pchar(URL), nil0, INTERNET_FLAG_RELOAD,0);
    Index := 0;
    CodeLength := 10;
    HttpQueryInfo(thefile, HTTP_QUERY_STATUS_CODE, @Code, CodeLength, Index);
    res:= pchar(@Code);
    if res = '200' then
      Result := True;

    if Assigned(thefile) then
      InternetCloseHandle(thefile);
  end;
  InternetCloseHandle(session);
end;

Hoffe, dass der dir hilft. :)