0

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

我正在用 Java 编写一个小应用程序,主要用于学术目的,但也考虑到了一项非常具体的任务。此应用程序所做的基本上是从基本 URL 开始构建 URL 层次结构,然后提供组织链接并对它们执行一些操作的能力。

想象以下 URL:

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

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

在我的代码中,我有一个能够对 URL 进行编码的类,并且我已经想到了一种验证它们的方法,我只是找不到一种方法来找出基本 URL 下的 URL 层次结构。

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

我不是要求特定的代码,只是(有点)完整地解释我可以采取什么方式,也许有一些框架代码来指导我。

此外,我将 URL 存储在一个TreeMap<URL,Boolean>结构中,其中Boolean表明 URL 是否已被分析。在快速浏览了 Java 7 API 规范后,我选择了这种结构,但是您有没有建议更适合这个特定目的的结构?

提前致谢 :)

4

1 回答 1

1

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

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

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

底线是您必须遵循链接才能确定服务器层次结构是什么,即使这样您也可能不会发现到层次结构的所有区域的链接。

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

EDIT2:(在对 FTP 机制发表评论后)FTP 协议有很多命令:请参阅此 wiki 列表。其中一个命令是:NLIST“返回指定目录中的文件名列表”。URL 规范在FTP 协议 URL 的 URL 格式和第 3.2.2 节中做出了特殊规定:

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

……

如果 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
于 2013-11-05T16:48:26.730 回答