Datei vorhanden im Internet?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
PureUser1966
Beiträge: 29
Registriert: 02.02.2017 21:03
Wohnort: Cologne / Germany

Datei vorhanden im Internet?

Beitrag 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)
move.w #$7fff, $dff09a
ILLEGAL
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Datei vorhanden im Internet?

Beitrag 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.
Bild
Benutzeravatar
PureUser1966
Beiträge: 29
Registriert: 02.02.2017 21:03
Wohnort: Cologne / Germany

Re: Datei vorhanden im Internet?

Beitrag von PureUser1966 »

Danke für die schnelle Antwort. Klingt plausibel
Werde ich heute Abend nach der Arbeit direkt mal testen.
Spitze !
move.w #$7fff, $dff09a
ILLEGAL
Benutzeravatar
PureUser1966
Beiträge: 29
Registriert: 02.02.2017 21:03
Wohnort: Cologne / Germany

Re: Datei vorhanden im Internet?

Beitrag 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. ;-)
move.w #$7fff, $dff09a
ILLEGAL
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Datei vorhanden im Internet?

Beitrag 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:
Hygge
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Datei vorhanden im Internet?

Beitrag 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.
Bild
Benutzeravatar
PureUser1966
Beiträge: 29
Registriert: 02.02.2017 21:03
Wohnort: Cologne / Germany

Re: Datei vorhanden im Internet?

Beitrag 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?
Zuletzt geändert von PureUser1966 am 15.11.2022 13:17, insgesamt 2-mal geändert.
move.w #$7fff, $dff09a
ILLEGAL
Benutzeravatar
PureUser1966
Beiträge: 29
Registriert: 02.02.2017 21:03
Wohnort: Cologne / Germany

Re: Datei vorhanden im Internet?

Beitrag 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....
move.w #$7fff, $dff09a
ILLEGAL
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Datei vorhanden im Internet?

Beitrag 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.
Bild
Benutzeravatar
PureUser1966
Beiträge: 29
Registriert: 02.02.2017 21:03
Wohnort: Cologne / Germany

Re: Datei vorhanden im Internet?

Beitrag 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
move.w #$7fff, $dff09a
ILLEGAL
Antworten