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

http://www.example.comベース URL (または)が提供されたときに、プログラムでこの階層を取得したいと考えていますhttp://www.example.com/

私のコードには、URL をエンコードできるクラスがあり、それらを検証する方法を既に考えていましたが、ベース URL の下の URL 階層を見つける方法が見つかりませんでした。

それを行う直接的な方法はありますか、それともベース URL からファイルをダウンロードし、ファイルに存在する相対リンクと絶対リンクから階層の構築を開始するだけですか?

私は特定のコードを求めているのではなく、それを行うためにどのような方法をとればよいかについての (ある程度) 完全な説明を求めているだけです。

また、 URLがすでに分析されているかどうかを示すTreeMap<URL,Boolean>構造にURLを保存しています。BooleanJava 7 API 仕様をざっと見てからこの構造を選択しましたが、この特定の目的により適した構造を提案してください。

前もって感謝します :)

4

1 に答える 1

1

HTTP プロトコルでは、特定の URL の「下」にあるすべての URL を要求する方法はありません。あなたは運が悪いです。

一部のプロトコル (ftp://... など) には明示的なメカニズムがあります.....

一部の HTTP サーバーは、「ディレクトリ」を要求するとインデックス ページを印刷しますが、この方法は推奨されておらず、そうするサーバーは多くありません。

要するに、サーバー階層が何であるかを判断するには、リンクをたどる必要があります。それでも、階層のすべての領域へのリンクを見つけられない場合があります。

編集:行儀の良いネチズンとして、アクセスするサーバーのrobots.txtファイルに従う必要があることを追加する必要があります....

EDIT2: (FTP メカニズムに関するコメントの後) FTP プロトコルには多くのコマンドがあります。この wiki リストを参照してください。コマンドの 1 つは、NLIST「指定されたディレクトリ内のファイル名のリストを返す」です。URL 仕様は、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
于 2013-11-05T16:48:26.730 に答える