Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi schneller Online Datei-Check (https://www.delphipraxis.net/154038-schneller-online-datei-check.html)

Flodding 25. Aug 2010 16:01

schneller Online Datei-Check
 
Guten Nachmittag zusammen... ich versuche schon n paar tage irgendiw nen schnellen check hinzubekommen ob eine datei online existiert oder nicht...

im grunde geht es um eine textdatei die die neueste version beinhaltet für meine automatische updatefunktion. ich habs jetzt mit den indys (TidHTTP) probiert nur kommt da das problem auf, dass er echt lange braucht um zu verstehen, wenn die datei nicht existiert (server down zB). existiert sie, ist alles okay... jedoch will ich den usern meines programms nicht zumuten, knappe 15 - 30 sekunden zu warten bis sich das programm "zeigt".

Habs auch schon mit nem Thread probiert und ihn dann im Thread danach suchen lassen, aber irgendwie stoppt das programm dann trotzdem solange, bis TidHTTP die meldung gibt dass datei nicht vorhanden ist.

dann habe ich ne funktion gefunden, die erst überprüft ob eine datei online zur verfügung steht, wenn ja, sie dann downloaded oder halt wenn nicht, dann SCHNELLE fehlermeldung... eigentlich perfekt für meine zwecke... hier mal der code:

http://www.delphipraxis.net/47-datei...tsanzeige.html

jedoch bin ich wohl irgendwie nicht dazu in der lage, diese funktion so umzufummeln, dass die textdatei NICHT downgeloaded wird, sondern nur geöffnet bzw. nicht geöffnet wird und dann der text mit der aktuellen version verglichen wird. sicher könnte ich die textdatei downloaden, dann auslesen und dann wieder löschen lassen... finde ich persönlich aber unsauber und umständlich...

ich hoffe einer kann mir nen denkanstoß verpassen

ich bedank mich schonmal im Voraus für alle antworten...

Floddy

Klaus01 25. Aug 2010 16:05

AW: schneller Online Datei-Check
 
.. schau dir mal URLCheck an.

Grüße
Klaus

H4ndy 25. Aug 2010 16:13

AW: schneller Online Datei-Check
 
Gab's nicht dieses idAntiFreeze zum Draufklicken, damit die Anwendung bei Anfragen nicht mehr einfriert?

Flodding 25. Aug 2010 16:17

AW: schneller Online Datei-Check
 
idAntifreeze funzt nicht wirklich... das hab ich auch schon probiert...

URLCheck liefert mir bei diesem Code:

Delphi-Quellcode:
if UrlCheck('http://www.bbned.nl/scripts/speedtest/download/file324654mb.bin', true) = 200 then ShowMessage('!') else ShowMessage('?');
ein "!" obwohl er mir ein "?" liefern sollte...

probier ich es so:

Delphi-Quellcode:
if UrlCheck('http://www.bbned.nl[B]llllllllll[/B]', true) = 200 then ShowMessage('!') else ShowMessage('?');
liefert er mir "?" zurück... kann also nur URLs finden und keine Dateien?

himitsu 25. Aug 2010 16:19

AW: schneller Online Datei-Check
 
Was für einen Wert liefert denn URLCheck?
Denn es sollte mit Dateien funktionieren.

Flodding 25. Aug 2010 16:24

AW: schneller Online Datei-Check
 
Delphi-Quellcode:
function UrlCheck(sUrl: String; bAllowRedirects: Boolean = false): Integer;
begin
  with TidHTTP.Create(nil) do
  try
    try
      HandleRedirects := bAllowRedirects;
      Head(sUrl);
      Result := Response.ResponseCode;
      errorhandler := Response.ResponseText;
    finally
      Free;
    end;
  except
      Result := GetLastError;
  end;
end;
Delphi-Quellcode:
if UrlCheck('http://www.bbned.nl/scripts/speedtest/download/file324654mb.bin', true) = 200 then ShowMessage('!' + errorhandler) else ShowMessage('?' + errorhandler);
liefert:

!HTTP/1.1 200 OK

himitsu 25. Aug 2010 16:33

AW: schneller Online Datei-Check
 
Delphi-Quellcode:
C := UrlCheck('http://www.bbned.nl/scripts/speedtest/download/file324654mb.bin', true);
ShowMessage(IntToStr(C));
:gruebel:

[edit]
OK, das sollte hoffentlich 200 ausgeben.

Zitat:

URLCheck liefert mir bei diesem Code: ... ein "!" obwohl er mir ein "?" liefern sollte...
Wieso sollte es denn "?" liefern?
"!" = Datei existiert.

Flodding 25. Aug 2010 16:35

AW: schneller Online Datei-Check
 
200

H4ndy 25. Aug 2010 16:37

AW: schneller Online Datei-Check
 
Zitat:

Zitat von Flodding (Beitrag 1044957)
200

Mal ehrlich, 200 heißt doch, dass es die Datei gibt. Oder gibt's die etwa nicht?
Zumindest kann ich die Adresse ansurfen, ist nur nix in der Datei drin.

himitsu 25. Aug 2010 16:39

AW: schneller Online Datei-Check
 
Ach ja, wenn diese Datei nicht existieren sollte,
die Webseite dieses aber selber auswertet und dann keinen korrekten Statuscode liefert, dann gibt es keine Möglichkeit dieses schnell zu prüfen.

Abgesehn vom vollständigen Runterladen der Datei und anschließendem Prüfen, ob diese Datei "korrekt" ist, bzw. das enthält, was mann will.

Flodding 25. Aug 2010 16:41

AW: schneller Online Datei-Check
 
mir scheint als gäbe es die datei tatsache irgendwie nur leer^^... hab ich nicht drauf geachtet... gut andere URL probiert...

Delphi-Quellcode:
C := UrlCheck('http://google.de/DD.txt', true);
das gibt mir nen 'Read Tiemout' der schon 5 sekunden dauert...

Klaus01 25. Aug 2010 16:46

AW: schneller Online Datei-Check
 
Hi Flo,

das Netzwerk benötigt auch ein wenig zum Antworten.
Wenn Dir 5 Sekunden zu lang sind - lager es in einen Thread aus.

Grüße
Klaus

Flodding 25. Aug 2010 16:48

AW: schneller Online Datei-Check
 
die funktion um ne datei downloaden zu können kanns ja auch schnell machen...

himitsu 25. Aug 2010 17:20

AW: schneller Online Datei-Check
 
Hab in dem anderem Thread noch eine andere Variante eingetragen, welche bei 404 ohne Exception auskommt.
(aber keine Ahnung, ob sie bei den 1xx- und 3xx-Codes/Fehlern korrekt arbeitet)

Flodding 25. Aug 2010 17:32

AW: schneller Online Datei-Check
 
welcher andere Thread?

C := UrlCheck('http://www.bbned.nl/scripts/speedtest/download/file324654mb.bin', true);
ShowMessage(IntToStr(C));

MUSS "!" zurück geben denn die richtige URL ist:

http://www.bbned.nl/scripts/speedtes...d/file32mb.bin

und nicht

http://www.bbned.nl/scripts/speedtes...le324654mb.bin

aber wenn man den unteren link öffnet, dann kommt ne leere datei... war ne doofe datei zum testen...

http://google.de/DD.txt das muss "?" zeigen und http://google.de/index.html sollte "!" zeigen

himitsu 25. Aug 2010 17:37

AW: schneller Online Datei-Check
 
In dem?
http://www.delphipraxis.net/434574-post13.html

Deren Downloadscript ist einfach nur Schott.
Es gibt immer 200 aus, egal ob die gewünschte Datei existiert oder nicht.

Flodding 25. Aug 2010 17:47

AW: schneller Online Datei-Check
 
ahh okay... hatte "einzelnen Beitrag" immer nur deshalb hatte ich deinen Post nicht gesehn :X

shmia 25. Aug 2010 17:56

AW: schneller Online Datei-Check
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei einer HTTP-Anfrage mit HEAD bekommt man übrigens auch noch Grösse der Resource (Dateigrösse) und das Datum.

Eine Anfrage auf diese URL http://www.delphipraxis.net/files/av...atar3057_2.gif
liefert z.B.:
Code:
Via: 1.1 MyProxy
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Length: 9961                          < ******
Expires: Sat, 12 Jun 2010 10:45:46 GMT
Date: Wed, 25 Aug 2010 16:39:58 GMT
Content-Type: image/gif
ETag: "1096bba-26e9-75092245cea80"
Server: Apache/2.2.9 (Debian) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8g SVN/1.6.9
Last-Modified: Sat, 05 Jun 2010 10:45:46 GMT < ******
Cache-Control: max-age=290304000, public
PS: im Anhang ein kleines Testprogramm, mit dem man diese Infos holen kann

himitsu 25. Aug 2010 18:13

AW: schneller Online Datei-Check
 
@shmia:
aber nur wenn das mitgesehndet wird.
Versuch mal die Dateigröße der http://www.delphipraxis.net/dp_portal.php zu bestimmen :stupid:

Luckie 25. Aug 2010 18:39

AW: schneller Online Datei-Check
 
Zitat:

Zitat von Flodding (Beitrag 1044953)
Delphi-Quellcode:
function UrlCheck(sUrl: String; bAllowRedirects: Boolean = false): Integer;
begin
  with TidHTTP.Create(nil) do
  try
    try
      HandleRedirects := bAllowRedirects;
      Head(sUrl);
      Result := Response.ResponseCode;
      errorhandler := Response.ResponseText;
    finally
      Free;
    end;
  except
      Result := GetLastError;
  end;
end;

Von wem stammt dieser Code? Zum einem müsste der try-except, try-finally Block umgekehrt geschachtelt sein und zum anderen wird bestimmt eine Exception ausgelöst und nicht der letzte Systemfehlercode gesetzt. Also die try-Blöcke umgekehrt schachteln, aus der Funktion eine Prozedur machen und im Fehlerfall eine Exception werfen, damit der Aufrufer mögliche Fehlerbehandeln kann.

himitsu 25. Aug 2010 18:43

AW: schneller Online Datei-Check
 
@Luckie:
Der Code war von dort http://www.delphipraxis.net/64518-ex...tml#post434574 und wurde hier in Beitrag #2 verlinkt.

Und ich war schneller, siehe letzter Post da drüben. :tongue:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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