![]() |
file exist indy 9
Hallo,
Ich habe folgende Aufgabenstellung bekommen: In einer Text Datei stehen ca 200 Urls zu pdf Files total verstreut im Internet auf diversen Webseiten. Diese PDF sind zwischen 100-5000KB groß. Die URL der PDF ändert sich ab und zu. Meine Aufgabe: Ich soll überprüfen, ob die URL existiert, also nicht die PDF Downloaden, sondern einfach nur gucken ob es das PDF gibt oder ob ein 404 Fehler ausgelößt wird... Kann mir jemand sagen wie man das am besten bewerkstelligt? Ich wüßte nur wie das mit INDY 9 hinhaut, das man einfach versucht die Datei herunterzuladen und wenns nicht geht, kommt eine error, aber wenn es dann doch geht, wird die Datei herunter geladen, und das will ich ja nicht.. PS: Optimal wäre eine Lösung mit INDY 9 |
Re: file exist indy 9
nimm die HEAD methode von INDY anstelle von GET
ein HEAD gibt nur Infos zur URL (also auch 404) zurück, statt die ganze Datei... Gruss Hinnack |
Re: file exist indy 9
werd ich mal ausprobieren sobald ich zeit hab, thx
|
Re: file exist indy 9
Hallo,
Also ganz kapier ichs nicht.... Head ist ja eine prozedur, keine funktion... Habs mit
Delphi-Quellcode:
mal probiert, aber da kommt der Fehler
procedure LinkExist(link: string);
begin showmessage(IdHTTP.Head(Link)); end;
Delphi-Quellcode:
nehm mal stark an das liegt daran das Head eine Prozedur ist und keine Funktion.
[Fehler] Links.pas(36): Inkompatible Typen: 'String' und 'procedure, untyped pointer or untyped parameter'
Wie meinst du das Zitat:
|
Re: file exist indy 9
Du rufst die Head Procedure auf und prüfst danach auf ResponseCode=200
Du kannst auch noch auf xxx.Response.xxx z.B ContentType zugreifen Jedoch das Dokument selbst wird nicht heruntergeladen - das geht nur mit GET.
Delphi-Quellcode:
function LinkExists(link: string) : boolean;
begin // IdHTTP Object erstellen etc. FollowRedirect, Cookies etc. einstellen try IdHTTP.Head(Link); except end; Result := (IdHTTP.ResponseCode = 200) end; Mit Ethereal kann man sich den Unterschied sehr gut anschauen ( ![]() Gruss Hinnack |
Re: file exist indy 9
Hallo,
danke so gehts. Etwas stört mich noch, und zwar wenn ich die Exe mit Delphi starte, dann bricht die Exe immer ab, wenn eine Exception ausgelößt wird. Also hier zb
Delphi-Quellcode:
Da hier immer eine Exception ausgelößt wird, wenn die URL nicht existiert, nervt das.
try
IdHTTP.Head(Link); except end; Kann ich irgendwo einstellen, das die Exe normal weiterennen soll wenn eine Exeption auftritt? EDIT: Ich suche die Einstellung im Deubuger wo ich austellen kann das der Debugger bei einer Exception was macht, finde diese Einstellung aber nicht |
Re: file exist indy 9
Tools - Debugger-Optionen - Sprachexceptions, da den Haken bei "Bei Delphi-Exceptions stoppen" rausnehmen (zumindest unter Delphi 5)
|
Re: file exist indy 9
Hello,
ja grad auch gefunden, hab die ganze Zeit unter Projekt --> Optionen gesucht. super, jetzt funktioniert alles wie ich mir das Vorstelle |
Re: file exist indy 9
Oh, mir ist aufgefallen, wenn ich mehrere Links hintereinander prüfe,
und einer davon stimmt nicht, dann wird trotzdem true zurückgeliefert.... hab den code so verändert und jetzt funktionierts bei mir immer
Delphi-Quellcode:
function TLink.LinkExist(link: string): boolean;
begin Result:=true; try IdHTTP.Head(Link); except result:=false; end; end; ist zwar nicht die feine englische art, aber nachdem immer die exception ausgelößt wird wenn es den link nicht gibt, funzt es so |
Re: file exist indy 9
man kann nach jedem Request auch
IdHTTP.Request.Clear aufrufen, dann wird auch IdHTTP.ResponseCode zurückgesetzt. Gruss hg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 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