从基本链接获取URL层次结构

时间:2013-11-05 16:44:03

标签: java url hierarchy

在问我的问题之前(这基本上就是标题所说的)我想提供一些背景知识,以便更好地了解我的情况。

我正在用Java编写一个小应用程序,主要用于学术目的,但也考虑了一个非常具体的任务。此应用程序的作用基本上是从基本URL开始构建URL层次结构,稍后可以组织链接并对其执行某些操作。

想象一下以下网址:

http://www.example.com
http://www.example.com/sub001
http://www.example.com/sub002
http://www.example.com/sub002/ultrasub

我希望我的程序在提供基本网址http://www.example.com(或http://www.example.com/)时检索此层次结构。

在我的代码中,我有一个能够编码URL的类,我已经想到了一种验证它们的方法,我找不到找到基本URL下面的URL层次结构的方法。

是否有直接的方法,或者我只需要从基本URL下载文件并从文件中存在的相对和绝对链接开始构建层次结构?

我不是要求特定的代码,只是(有点)完整的解释我可以采取什么方式来做这件事,可能会有一些骨架代码来指导我。

此外,我将网址存储在TreeMap<URL,Boolean>结构中,如果已经分析了URL,则Boolean表示。我在Java 7 API规范中快速浏览后选择了这个结构,但是你是否建议任何更适合这个特定目的的结构?

提前致谢:)

1 个答案:

答案 0 :(得分:1)

HTTP协议中无法请求给定URL下“所有”的所有URL。你运气不好。

某些协议(例如ftp:// ...)确实有明确的机制.....

如果您请求“目录”,某些HTTP服务器将打印索引页面,但不推荐这种做法,并且没有多少服务器会这样做。

最重要的是,您必须遵循链接以确定服务器层次结构是什么,即使这样,您也可能找不到指向层次结构所有区域的链接。

编辑:我应该补充一点,作为一个表现良好的网民,你应该遵守你访问的任何服务器上的robots.txt文件....

EDIT2 :(评论FTP机制后) FTP协议有许多命令:See this wiki list。其中一个命令是:NLIST“返回指定目录中的文件名列表”。 URL specification为FTP协议URL的URL格式提供了特殊规定,并在3.2.2节中提供:

  

FTP URL的url-path具有以下语法:    <cwd1>/<cwd2>/.../<cwdN>/<name>;type=<typecode>

     

...

     

如果类型代码为“d”,请执行带有参数的NLST(名称列表)命令,并将结果解释为文件目录列表。

当我从命令行(而不是浏览器)尝试此操作时,我可以看到效果:

rolf@home ~ $ curl 'ftp://sunsite.unc.edu/README'

  Welcome to ftp.ibiblio.org, the public ftp server of ibiblio.org.  We
  hope you find what you're looking for.

  If you have any problems or questions, please see

  http://www.ibiblio.org/help/

  Thanks! 

type=d我得到了:

rolfl@home ~ $ curl 'ftp://sunsite.unc.edu/README;type=d'
HEADER.images
incoming
HEADER.html
pub
unc
README