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, 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

也许问题在于,目前许多网络服务器和 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 回答