Seite 1 von 2

Datei vorhanden im Internet?

Verfasst: 15.11.2022 11:03
von PureUser1966
Hallo zusammen,
ich versuche einen verlässlichen Weg zu finden ob eine Datei im Internet innerhalb einer Homepage vorhanden ist oder nicht.
Im Prinzip sowas wie FileExist(), jedoch mit URL statt Filenamen und #true oder #false als Rückgabewert im Idealfall.

Nachdem ich länger vergeblich gesucht habe, dachte ich zuerst mit RSBasics Dateigröße ermitteln
einen Weg gefunden zu haben, jedoch funktioniert das nur verlässlich, wenn die Datei wirklich vorhanden ist.
Ist sie nicht vorhanden wird ein mir (momentan) unerklärlicher Wert als Dateigröße zurückgegeben.
Damit fällt das leider aus.

Auch mein Versuch mit IsValidURL war von vorneherein zum scheitern verurteilt,

Code: Alles auswählen

Procedure.i	CheckValidURL(sMyURL.s)
	Protected.i	iResult	=	0
	iResult	=	IsValidURL_(#Null, sMyURL, #Null)
	ProcedureReturn	iResult
EndProcedure
da nur auf Gültigkeit der reinen URL getestet wird.

Hat jemand eventuell einen Codeschnipsel der genau das tut was ich möchte?

Lieben Gruß aus Köln, PureUser1966 (WB)

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 11:27
von NicTheQuick
Ich würde nach dem HTTP-Statuscode gehen:

Code: Alles auswählen

request = HTTPRequest(#PB_HTTP_Get, "https://www.purebasic.fr/german/download/file.php?avatar=4651_1486062777.jpg", "", #PB_HTTP_HeadersOnly)
If request
	statusCode = Val(HTTPInfo(request, #PB_HTTP_StatusCode))
	Debug statusCode
	If statusCode >= 200 And statusCode < 300
		Debug "URL funktioniert"
	EndIf
	FinishHTTP(request)
EndIf
Hintergrund ist, dass bei Nicht-Existenz einer Datei auf einem Server in der Regel eine 404-Fehler kommt, aber trotzdem eine HTML-Seite, die einem das schön aufbereitet sagt und evtl. sogar Alternativen anbietet. Da kommst du dann mit ContentLength nicht weiter. Mit dem Statuscode aber schon, dafür ist er da.

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 11:35
von PureUser1966
Danke für die schnelle Antwort. Klingt plausibel
Werde ich heute Abend nach der Arbeit direkt mal testen.
Spitze !

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 11:46
von PureUser1966
Hat mir keine Ruhe gelassen und funktioniert FAST....

OriginalBeispiel (Datei vorhanden) im Netz. Korrekte Ausgabe von 'URL funktioniert'

Code: Alles auswählen

request = HTTPRequest(#PB_HTTP_Get, "https://www.purebasic.fr/german/download/file.php?avatar=4651_1486062777.jpg", "", #PB_HTTP_HeadersOnly)
Mein Test, inkorrekte Ausgabe von 'URL funktioniert'. Datei ist ja nicht vorhanden. (Zwei x am Dateinamen zugefügt.)

Code: Alles auswählen

request = HTTPRequest(#PB_HTTP_Get, "https://www.purebasic.fr/german/download/file.php?avatar=4651_1486062777xx.jpg", "", #PB_HTTP_HeadersOnly)
Wobei ich vermute das der Text 'URL funktioniert' absichtlich so gewählt wurde. ;-)

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 12:40
von Kiffi
PureUser1966 hat geschrieben: 15.11.2022 11:46Mein Test, inkorrekte Ausgabe von 'URL funktioniert'. Datei ist ja nicht vorhanden. (Zwei x am Dateinamen zugefügt.)

Code: Alles auswählen

request = HTTPRequest(#PB_HTTP_Get, "https://www.purebasic.fr/german/download/file.php?avatar=4651_1486062777xx.jpg", "", #PB_HTTP_HeadersOnly)
hast Du den URL schon mal in die Adresszeile Deines Browsers eingegeben? :wink:

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 13:00
von NicTheQuick
Offenbar ist es der Forensoftware nicht ganz so wichtig wie der Dateiname ist. Ich schätze das hat mit Caching zu tun. Aber wenn du statt ".jpg" einfach nur ".jp" schreibst, geht es auf jeden Fall schief.

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 13:11
von PureUser1966
hast Du den URL schon mal in die Adresszeile Deines Browsers eingegeben? :wink:
Ja, hab ich. Ist mein Avatar hier im Forum. (inklusive der test xx im Namen)
Warum fragst du ? Hab ich was übersehen oder sehe einfach nur den Wald vor lauter Bäumen nicht?

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 13:16
von PureUser1966
NicTheQuick hat geschrieben: 15.11.2022 13:00 Offenbar ist es der Forensoftware nicht ganz so wichtig wie der Dateiname ist. Ich schätze das hat mit Caching zu tun. Aber wenn du statt ".jpg" einfach nur ".jp" schreibst, geht es auf jeden Fall schief.
Heißt das, es gibt KEINE verlässliche Methode um definitiv festzustellen ob eine Datei definitiv vorhanden ist oder nicht?
Der Webserver (oder wer auch immer) geht annäherungsweise hin und sagt zum Beispiel:

gesucht wird 'http://www.testserver.de/data/img/balken1.jpg'
findet stattdessen 'http://www.testserver.de/data/img/balken5.jpg'
und gibt das dann sein ok zurück weil es am ähnlichsten ist?

Irgendwie unbefriedigend....

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 14:37
von NicTheQuick
Nein, natürlich nicht. Aber ein Webserver ist ja nicht immer nur einfach eine Dateihalde. Da laufen Skripte und Applikationen. Und was die aus dem machen, was du als Parameter übergibst, hat nichts mit "Dateien" ansich zu tun.

Deswegen ist dein Begriff einer "Datei" auch etwas falsch, wenn du über Webseiten sprichst. Wenn du so willst, ist jede Seite hier im Forum eine heruntergeladene HTML-Datei, aber eigentlich existiert sie so nicht auf dem Server, sondern wird dynamisch generiert. So verhält es sich auch mit deinem Avatar-Link. Selbst wenn du das "xx" in den Parameter einfügst und die URL aufrufst, wird dein Thumbnail zurückgegeben. Warum das so ist, können dir nur die Entwickler der Foren-Software erklären.

Unbefriedigend ist da gar nichts, so funktioniert das Web nun mal.

Scheinbar ist bei den Thumbnail-Links nur wichtig, was vor dem _ steht. Das ist nämlich die User-ID des Users, von dem du das Thumbnail sehen möchtest. Meine ID ist 46, also funktionieren alle diese Links und zeigen mein Thumbnail an: Wie du siehst wird hier das PHP-Skript "file.php" mit dem Parameter "avatar=46.gif" angesprochen. Und das Skript liefert dann eben das Thumbnail, das dem User mit der ID 46 gehört. Dahinter stecken Datenbankzugriffe und mehr. Das ist nicht einfach nur eine Datei, die du herunterlädst.

Re: Datei vorhanden im Internet?

Verfasst: 15.11.2022 15:21
von PureUser1966
Nochmals vielen Dank für die ausführliche Antwort.
Grundsätzlich gebe ich dir gerne Recht was dynamisch generierte Seiten angeht.
Mein Fehler war anscheinend das ich dachte man könnte tatsächlich davon ausgehen das eine 'Datei' die irgendwann von irgendwem
auf dem Server abgelegt wurde/wird
wie zb https://www.purebasic.com/screenshots/ide_thumbnail.png
auch direkt und vor allem zuverlässig auf Existenz geprüft werden kann.

Das funktioniert ja auch prinzipiell, aber eben etwas anders als bei lokalen Dateien auf der Platte.

Nochmals vielen Dank für Deine/Eure Hilfe