2011-05-15 124 views
7

我正在尝试使用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],Date = [Sun,2011年5月15日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-通过= [PHP/5.2.9-1]}

即使不存在这样的站点,如何将它归类为一个破碎的链接?

+0

你100%确定你正在测试什么网站?尝试在该方法的顶部添加一个'System.out.println(link);'。 – Mat 2011-05-15 19:03:18

+0

@Mat:是的,我确实添加了print语句,它正在测试从主 – user754740 2011-05-16 06:28:00

回答

4

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

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


编辑回答人提交的评论(因为它是太长,不适合在评论): 我没有看到你的问题一个简单的答案,但有几种不同类型的故障:

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

传递的正确链接。另外,如果情况并非如此,则“somefakesite.com”将返回连接错误,而不是404状态因为正在运行的服务器中缺少的资源与缺少的服务器不一样)。 – SJuan76 2011-05-15 19:10:48

+0

我测试了2个断开的链接,它们都显示不同的状态。 1. http://legacy.ncsu.edu/ECE566 {NULL = [HTTP/1.1 404未找到] 状态 - 404 2. http://somefakewebsite.net {NULL = [HTTP/1.1 200确定] 状态 - 200 现在的问题是我应该检查重定向断开的链接的域标题?感谢你的帮助。 – user754740 2011-05-16 19:35:51

+0

@ user754740我试着用我的帖子编辑回答;不幸的是,我知道不容易解决。 – SJuan76 2011-05-17 09:55:39