![]() |
Prüfen, ob Bild im Internet erreichbar
Hi,
ich habe eine Liste mit Links zu Bildern im Internet. Einiger der Bilder existieren, andere wiederum nicht. Diese Links werden dann an ein anderes Programm weitergegeben, das die Bilder dann runterlädt. Dabei darf ich aber nur die Links übergeben, die wirklich existieren. Also muss ich zuerst prüfen, ob der Link zu einem Bild führt, das man runterladen könnte. Die Frage ist: wie prüfe ich, ob ein Bild existiert, ohne es runterzuladen? Kann mann einfach nur den HTTP-Header anfordern, ohne den Content? Für Vorschläge bin ich offen :wink: Dominik |
Re: Prüfen, ob Bild im Internet erreichbar
Quick and dirty: versuch es runterzuladen und wenn es nicht funktioniert, gibt es die Datei nicht.
|
Re: Prüfen, ob Bild im Internet erreichbar
Von Quick and Dirty halte ich gar nix, weil Bilder bekanntlich groß sind und unnötige Wartezeiten erzeugt werden.
Man kann einen HTML-Head Request machen. Wenn der erfolgreich war, dann bekommst Du einen Responsecode von 200, einen Fehler sonst. Wie man den auf Delphi absetzt, weiß ich nicht, in einer Bash so: bash-2.05b$ telnet ![]() Trying ... Connected to ![]() Escape character is '^]'. HEAD /bit/thinner-archives-vol-1.zip.torrent HTTP/1.1 Host: ![]() [hit enter again] HTTP/1.1 200 OK Date: Wed, 17 Mar 2004 18:00:49 GMT Server: Apache/2.0.48 (Unix) mod_ssl/2.0.48 OpenSSL/0.9.6l PHP/4.3.4 Last-Modified: Wed, 25 Feb 2004 22:37:23 GMT ETag: "1450013-6514-e905eec0" Accept-Ranges: bytes Content-Length: 25876 Connection: close Content-Type: application/x-bittorrent |
Re: Prüfen, ob Bild im Internet erreichbar
Zitat:
|
Re: Prüfen, ob Bild im Internet erreichbar
Delphi-Quellcode:
Ich hoffe, ich habe nichts vergessen oder zuviel gelöscht.
uses WinInet;
... function IsUrlValid(const sUrl: string): Boolean; var hInet, hConnect: HINTERNET; StatusCode, dummy, bufLen: DWORD; begin Result := False; hInet := InternetOpen(PChar(Application.Title), INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, nil, nil, 0); if Assigned(hInet) then try hConnect := InternetOpenUrl(hInet, PChar(sUrl), nil, 0, INTERNET_FLAG_NO_UI, 0); if Assigned(hConnect) then try dummy := 0; bufLen := SizeOf(StatusCode); if HttpQueryInfo(hConnect, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, @StatusCode, bufLen, dummy) then //Statuscode 200 = alles OK Result := StatusCode = 200; finally InternetCloseHandle(hConnect); end; finally InternetCloseHandle(hInet); end; end; |
Re: Prüfen, ob Bild im Internet erreichbar
Jo, Lösung wurde ja schon genannt: HEAD-Request.
Müsse auch mit den Indys gehen, also IdHTTP.Head() oder so |
Re: Prüfen, ob Bild im Internet erreichbar
So sollte es gehen:
Delphi-Quellcode:
idhttp1.Head(pfad);
ShowMessage(IntToStr(idhttp1.ResponseCode)); |
Re: Prüfen, ob Bild im Internet erreichbar
Das komische ist nur, dass die HEAD-Methode viel länger braucht als die GET-Methode:
Delphi-Quellcode:
function ImageCheckGET(Link: string): Boolean;
begin result := True; with TIdHTTP.Create(nil) do try try Get(Link); finally Free; end; except result := False; end; end; function ImageCheckHEAD(Link: String): Boolean; begin result := True; with TIdHTTP.Create(nil) do try try Head(Link); finally Free; end; except Result := False; end; end; |
Re: Prüfen, ob Bild im Internet erreichbar
Kann es sein, dass Du die Reihenfolge von except und finally vertauscht hast?
|
Re: Prüfen, ob Bild im Internet erreichbar
Zitat:
Ändert aber nichts an der Geschwindigkeit. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:49 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 by Thomas Breitkreuz