Javaで壊れたURL(HTTP 404)を検出する最も効率的な方法は何ですか? これをループで実行し、できるだけ時間を短縮したいと思います。
4 に答える
URL を要求した後でのみ 404 を検出できます。コード (リダイレクトの場合は 200、リダイレクトの場合は 301、欠落ファイルの場合は 404) を含むヘッダーが返され、それを確認できます。
そのため、リクエストを実行して、404 が返されるまで待つ必要があります。
スキップしてはならないかなり適切なコメントが以下にあるので、ここで繰り返します: 最適化の可能性 (既存の URL の場合): GET の代わりに HEAD リクエストを使用します。
URL が壊れる可能性があるさまざまな方法があります。
- 構文的に無効
- 存在しないドメインが含まれています
- サーバーに到達できません
- サーバーは接続を受け入れません
- サーバーがエラーで応答する
最初のものを除いて、これらすべてに比較的長い時間がかかる可能性があり (おそらく平均で 1 秒以上)、別のコンピューターと通信しているため、速度を上げる方法はありません。
できることは、スレッド プールを使用して多数の URL を並行してチェックすることだけです。
例外をキャッチして HTTP ステータス コードをチェックすることで、URL 接続を確立し、URL が壊れていることを確認できます。例外がスローされず、HTTP ステータスが 200 の場合、URL は OK です。
しかし、注意してください!場合によっては、URL が壊れているにもかかわらず、アプリケーションが人間が読めるステータス 200 のエラー ページを返します。たとえば、サイト www.somecompany.com は存在しますが、ページ www.somecompany.com/foo.html は存在しません。そこにアクセスしようとすると、「ページが存在しません」というメッセージが表示されますが、HTTP ステータスは 200 です。これは、ページ コンテンツのみを解析することで (場合によっては) 解決できます。