检查损坏的链接

我正在尝试使用Java在网页中查找所有损坏的链接。 代码如下:

   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。

此代码为所有网页提供了HTTP 200状态,包括已损坏的网页。 例如http://www.somefakesite.net/提供以下标题字段:

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

即使这些网站不存在,如何将它归类为断开的链接?


也许问题是,目前很多网络服务器和DNS提供商检测到这些“断开”的链接,并将您重定向到他们的“未找到”页面。

根据您知道发送404代码的URL(它显示浏览器原始消息)对其进行测试。


编辑回答作者的评论(因为它太长,以适应评论):我没有看到你的问题的简单答案,但有几种不同类型的失败:

  • 对于重定向的DNS失败(DNS无法找到的URL,并且您被重定向到另一个页面)。 所有重定向(如果您重定向)可能会进入同一页面(由您的ISP / DNS提供商提供),您可以检查。 当然,如果您尝试使用其他ISP / DNS提供商,页面可能会有所不同。 如果你没有被重定向,那么你会得到一个连接错误。
  • 对于具有有效DNS但不工作的服务器(例如,google.com宕机),应该存在连接错误。
  • 对于服务器中缺少的资源(“页面”)而言,这更加困难。 404意味着它被破坏了,但是如果服务器没有发送它,那么还有更多事情要做。 重定向可能有助于将链接标记为可疑,但应稍后手动检查,因为它不仅用于捕获缺少的链接(例如,www.google.com会将我重定向到www.google.es)
  • 链接地址: http://www.djcxy.com/p/52765.html

    上一篇: Check for broken links

    下一篇: Monitor apps power usage