7

Javaを使用してWebページ内の壊れたリンクをすべて見つけようとしています。コードは次のとおりです。

   private static boolean isLive(String link){

    HttpURLConnection urlconn = null;
    int res = -1;
    String msg = null;
    try{

        URL url = new URL(link);
        urlconn = (HttpURLConnection)url.openConnection();
        urlconn.setConnectTimeout(10000);
        urlconn.setRequestMethod("GET");
        urlconn.connect();
        String redirlink = urlconn.getHeaderField("Location");
        System.out.println(urlconn.getHeaderFields());
        if(redirlink != null && !url.toExternalForm().equals(redirlink))
            return isLive(redirlink);
        else
            return urlconn.getResponseCode()==HttpURLConnection.HTTP_OK;

    }catch(Exception e){

      System.out.println(e.getMessage());
      return false;

    }finally{

        if(urlconn != null)
            urlconn.disconnect();

    }


}

public static void main(String[] s){

    String link = "http://www.somefakesite.net";
    System.out.println(isLive(link));

}

http://nscraps.com/Java/146-program-code-broken-link-checker.htmから参照されるコード。

このコードは、壊れたWebページを含むすべてのWebページにHTTP200ステータスを与えます。たとえば、 http://www.somefakesite.net/には、次のヘッダーフィールドがあります。

{null = [HTTP / 1.1 200 OK]、Date = [Sun、15 May 2011 18:51:29 GMT]、Transfer-Encoding = [chunked]、Keep-Alive = [timeout = 4、max = 100]、Connection = [Keep-Alive]、Content-Type = [text / html]、Server = [Apache / 2.2.15(Win32)PHP / 5.2.12]、X-Powered-By = [PHP / 5.2.9-1] }

そのようなサイトは存在しませんが、リンク切れとして分類するにはどうすればよいですか?

4

1 に答える 1

4

おそらく問題は、現在多くの Web サーバーと DNS プロバイダーがこれらの「壊れた」リンクを検出し、「見つからない」ページにリダイレクトすることです。

404 コードを送信することがわかっている URL に対してテストします (ブラウザの元のメッセージが表示されます)。


作者によるコメントに答える編集(コメントに収まらないほど長いため):あなたの問題に対する簡単な答えはわかりませんが、いくつかの異なるタイプの失敗があります:

  • リダイレクトされる DNS 障害 (DNS によって URL が見つからず、別のページにリダイレクトされる) の場合。すべてのリダイレクト (リダイレクトされた場合) は、同じページ (ISP/DNS プロバイダーによって提供される) に移動する可能性が高いため、確認できます。もちろん、別の ISP/DNS プロバイダーで試すと、ページが異なる場合があります。リダイレクトされていない場合は、接続エラーが発生します。
  • 有効な DNS を持つサーバーが機能していない場合 (たとえば、google.com がダウンした場合)、接続エラーが発生するはずです。
  • サーバーにないリソース (「ページ」) の場合は、さらに困難です。404 は壊れていることを意味しますが、サーバーがそれを送信しない場合は、それ以上のことはほとんどありません。リダイレクトは、疑わしいリンクにフラグを付けるのに役立つ場合がありますが、見つからないリンクをキャプチャするためだけに使用されるわけではないため、後で手動で確認する必要があります (たとえば、www.google.com は www.google.es にリダイレクトします)。
于 2011-05-15T19:08:09.707 に答える