AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Prüfen, ob Bild im Internet erreichbar
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen, ob Bild im Internet erreichbar

Ein Thema von dominikkv · begonnen am 26. Nov 2009 · letzter Beitrag vom 26. Nov 2009
Antwort Antwort
Seite 1 von 2  1 2      
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:09
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


Dominik
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:12
Quick and dirty: versuch es runterzuladen und wenn es nicht funktioniert, gibt es die Datei nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
mannewolff

Registriert seit: 21. Okt 2008
48 Beiträge
 
RAD-Studio 2009 Arc
 
#3

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:17
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
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:18
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...
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:21
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:22
Jo, Lösung wurde ja schon genannt: HEAD-Request.

Müsse auch mit den Indys gehen, also IdHTTP.Head() oder so
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:29
So sollte es gehen:
Delphi-Quellcode:
idhttp1.Head(pfad);
ShowMessage(IntToStr(idhttp1.ResponseCode));
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:55
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;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 13:58
Kann es sein, dass Du die Reihenfolge von except und finally vertauscht hast?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Prüfen, ob Bild im Internet erreichbar

  Alt 26. Nov 2009, 14:10
Zitat von DeddyH:
Kann es sein, dass Du die Reihenfolge von except und finally vertauscht hast?
Kann sein...
Ändert aber nichts an der Geschwindigkeit.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 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