Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Prüfen, ob Bild im Internet erreichbar (https://www.delphipraxis.net/143941-pruefen-ob-bild-im-internet-erreichbar.html)

dominikkv 26. Nov 2009 13:09


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

Luckie 26. Nov 2009 13:12

Re: Prüfen, ob Bild im Internet erreichbar
 
Quick and dirty: versuch es runterzuladen und wenn es nicht funktioniert, gibt es die Datei nicht.

mannewolff 26. Nov 2009 13:17

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 www.mysite.com 80
Trying ...
Connected to www.mysite.com.
Escape character is '^]'.
HEAD /bit/thinner-archives-vol-1.zip.torrent HTTP/1.1
Host: www.mysite.com
[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

dominikkv 26. Nov 2009 13:18

Re: Prüfen, ob Bild im Internet erreichbar
 
Zitat:

Zitat von Luckie
Quick and dirty: versuch es runterzuladen und wenn es nicht funktioniert, gibt es die Datei nicht.

Genau so mache is es auch gerade... nur das ist nicht allzu performant, weil, wenn es das Bild gibt, er es dann auch runterlädt. Und das dauert...

DeddyH 26. Nov 2009 13:21

Re: Prüfen, ob Bild im Internet erreichbar
 
Delphi-Quellcode:
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;
Ich hoffe, ich habe nichts vergessen oder zuviel gelöscht.

jfheins 26. Nov 2009 13:22

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

Angel4585 26. Nov 2009 13:29

Re: Prüfen, ob Bild im Internet erreichbar
 
So sollte es gehen:
Delphi-Quellcode:
idhttp1.Head(pfad);
ShowMessage(IntToStr(idhttp1.ResponseCode));

dominikkv 26. Nov 2009 13:55

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;

DeddyH 26. Nov 2009 13:58

Re: Prüfen, ob Bild im Internet erreichbar
 
Kann es sein, dass Du die Reihenfolge von except und finally vertauscht hast?

dominikkv 26. Nov 2009 14:10

Re: Prüfen, ob Bild im Internet erreichbar
 
Zitat:

Zitat von DeddyH
Kann es sein, dass Du die Reihenfolge von except und finally vertauscht hast?

Kann sein... :mrgreen:
Ändert aber nichts an der Geschwindigkeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.
Seite 1 von 2  1 2      

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