[Java / Alg] Hoe weet je of een URL een dir of file is?

Pagina: 1
Acties:

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:28

Robtimus

me Robtimus no like you

Topicstarter
Ik heb een programma geschreven dat oa uit een remote file (HTTP, ik gebruik java.net.URL) alle links filtert. Dit lukt me wel, op 1 ding na:
Als de base url een directory is die niet eindigt op een /, dan zit de child URL een directory te laag als hij relatief is.
Voorbeeld: base URL = http://www.domein.nl/bla, daarin zit een link naar doc.html, dan maakt hij hiervan http://www.domein.nl/doc.html en niet http://www.domein.nl/bla/doc.html.
Ik gebruik gewoon een constructor voor het creeren van de child URL:
Java:
1
URL child = new URL(base, linkje);

Weet iemand of hier iets tegen te doen is? De base URL zelf ophalen en kijken naar de response code (moved) werkt niet altijd, want een file kan ook redirected zijn. Of moet ik dit gewoon maar accepteren, en documenteren dat de resultaten incorrect kunnen zijn als er geen / achter paden staat?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Ghost
  • Registratie: April 2002
  • Laatst online: 04-02-2025

Ghost

Phasma Ex Machina

Ik weet niet helemaal of ik je probleem doorheb, maar volgens mij probeer je uit te vlooien of een gegeven URL al dan niet een directory is.

Wat je zou kunnen doen is controlleren of base URL + "/" geldig is. Dus in je voorbeeld: je voegt aan http://www.domein.nl/bla een / toe zodat je http://www.domein.nl/bla/ krijgt, je controleert of dat pad bestaat. Zoniet, dan krijg je een 404 en weet je dat het niet gaat om een directory :)

When in doubt, press some random buttons.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Als er altijd naar bestanden gelinkt wordt welke een extensie in de bestandsnaam hebben (stel, je weet dat er altijd naar of .html of .php gelinkt wordt), kan je daarop testen. Heb je echter geen inzicht in al die bestanden en wil je het zo algemeen mogelijk houden, dan is dat natuurlijk een gevaarlijke en foutieve aanname.

{signature}


  • m-m
  • Registratie: Augustus 2001
  • Niet online

m-m

Ghost schreef op dinsdag 20 september 2005 @ 13:09:
Ik weet niet helemaal of ik je probleem doorheb, maar volgens mij probeer je uit te vlooien of een gegeven URL al dan niet een directory is.

Wat je zou kunnen doen is controlleren of base URL + "/" geldig is. Dus in je voorbeeld: je voegt aan http://www.domein.nl/bla een / toe zodat je http://www.domein.nl/bla/ krijgt, je controleert of dat pad bestaat. Zoniet, dan krijg je een 404 en weet je dat het niet gaat om een directory :)
Dat gaat al mis bij PHP scripts, helaas. http://worldispnetwork.com/phpinfo.php/blaat/blaat/bla
Je zal dus iets intelligenter te werk moeten gaan. (En er zijn ook servers waar je de .php extensie weg kan laten)

[ Voor 6% gewijzigd door m-m op 20-09-2005 13:16 ]


Verwijderd

Een url is altijd een file ;)

(over http)

[ Voor 22% gewijzigd door Verwijderd op 20-09-2005 13:24 ]


Verwijderd

@Mark platvoet: Klopt toch niet??? http://www.dommeinnaam.nl/ verwijst initieel helemaal niet naar een bestand. Als de web server een default document heeft ingesteld zou hij daar waarschijnlijk naar gaan zoeken, maar het is dan toch nog steeds zo dan dat http://www.domeinnaam.nl/ geen bestandsverwijzing is? Kan jij mij anders vertellen naar welk bestand http://www.google.nl/ verwijst?

Verwijderd

Hij bedoelt dat in het HTTP-protocol geen onderscheid gemaakt wordt tussen bestanden en mappen.
Elke HTTP-response heeft dezelfde structuur, ongeacht het type bestand/map.

headers
witregel
inhoud
witregel

[ Voor 3% gewijzigd door Verwijderd op 20-09-2005 15:21 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 30-04 04:38
Een basisidee van HTTP is dat een URL verwijst naar een document. Binnen HTTP bestaan er dus alleen maar 'documenten' en geen onderscheid tussen bestanden en mappen. Het is ook helemaal niet gezegd dat een 'document' moet corresponderen met een bestand op de webserver. Dat is ook wat mark platvoet zegt.

Denk je dat op de webserver van GoT een directory 'forum' is met een directory 'list_messages' met een bestand '1071417'? Natuurlijk niet.

Je kunt dus wel een 'oplossing' bedenken die misschien goed werkt in 99% van de gevallen maar omdat je een onderscheid wil maken dat HTTP gewoon niet biedt zal het altijd een benadering blijven. Zelf vond ik de suggesties van Ghost en Voutloos wel aardig.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Verwijderd schreef op dinsdag 20 september 2005 @ 14:49:
[..] Kan jij mij anders vertellen naar welk bestand http://www.google.nl/ verwijst?
De webserver maakt hier intern gewoon http://www.google.nl/webhp/index.php van deze stuurt dus die content terug.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Volgens mij houdt google geen rekening met wat na webhp komt.
http://www.google.nl/webhpditteltnietmee werkt ook.

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Ook goed, uiteindelijk stuurt hij een bestand terug. Een directory is ook moeilijk over HTTP te versturen.

"The shell stopped unexpectedly and Explorer.exe was restarted."

Pagina: 1