![]() |
Prüfen ob Datei online
Wie würdet ihr am sinnvollsten prüfen, ob eine Datei unter einer gegebenen URL zum Download bereit stünde? Ich will die Datei nicht herunterladen, sondern so einfach uns schnell wie möglich ein einfaches "Ja/Nein"-Ergebnis. Mein Ansatz wäre bisher, einfach zu versuchen, den Download zu starten. Gibt es da eine bessere Möglichkeit (sowas würde ja z.B. auch einen Downloadzähler in Foren erhöhen, etc.)?
|
AW: Prüfen ob Datei online
wie wäre es mit einem http head request?
mfg vom handy |
AW: Prüfen ob Datei online
Jau, das klingt gut :thumb:. Ich knobel dann mal, das sauber in Delphi umzusetzen (wenn da jemand Ideen oder Ansätze hat, bin ich ganz Ohr)
|
AW: Prüfen ob Datei online
Kleines Snippet
Code:
function CheckUrl(url:string):Boolean;
var hSession, hfile: hInternet; dwindex,dwcodelen :dword; dwcode:array[1..20] of char; res : pchar; begin Result := FALSE; if Pos('http://',lowercase(url)) = 0 then begin url := 'http://'+url; end; hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG,NIL, NIL, 0); if Assigned(hsession) then begin hfile := InternetOpenUrl(hsession, PCHAR(url), NIL, 0, INTERNET_FLAG_RELOAD, 0); dwIndex := 0; dwCodeLen := 10; HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex); res := pchar(@dwcode); Result:= (res ='200') or (res ='302'); if Assigned(hfile) then begin InternetCloseHandle(hfile); end; InternetCloseHandle(hsession); end; end; |
AW: Prüfen ob Datei online
Eingebaut, getestet: Funktioniert wunderbar :thumb:
Ich hatte mich schon bei IPWorks und Indy umgesehen, aber so ist natürlich noch besser. Wäre das nicht was für die CodeLib? |
AW: Prüfen ob Datei online
Meine Variante sieht so ähnlich aus, bietet aber auch einen TimeOut an:
Delphi-Quellcode:
function IsUrlValid(const sUrl: string; CheckTimeout: DWORD = 3000): Boolean;
var hInet, hConnect: HINTERNET; StatusCode, dummy, bufLen, Option: DWORD; begin Result := False; hInet := InternetOpen(PChar(Application.Title), INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, nil, nil, 0); if Assigned(hInet) then try Option := CheckTimeout; InternetSetOption(hInet, INTERNET_OPTION_CONNECT_TIMEOUT, @Option, SizeOf(Option)); InternetSetOption(hInet, INTERNET_OPTION_RECEIVE_TIMEOUT, @Option, SizeOf(Option)); hConnect := InternetOpenUrl(hInet, PChar(trim(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; |
AW: Prüfen ob Datei online
Könnte man nicht gleichzeitig auch noch die Dateigröße ermitteln? Also Rückgabewert als integer und -1 zurückgeben wenn offline?
|
AW: Prüfen ob Datei online
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 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