Проверить битые ссылки - PullRequest
7 голосов
/ 15 мая 2011

Я пытаюсь найти все неработающие ссылки на веб-странице, используя 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], Дата = [Вс, 15 мая 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]}

Даже если таких сайтов не существует, как их классифицировать как неработающую ссылку?

1 Ответ

4 голосов
/ 15 мая 2011

Возможно, проблема в том, что в настоящее время многие провайдеры веб-серверов и DNS обнаруживают эти «неработающие» ссылки и перенаправляют вас на их «не найденные» страницы.

Проверьте его по URL-адресу, который, как вам известно, отправляет код 404(показывает исходное сообщение браузера).


РЕДАКТИРОВАТЬ, чтобы ответить на комментарий автора (поскольку он слишком длинный, чтобы уместиться в комментарии): я не вижу простого ответа на вашу проблему,но есть несколько различных типов сбоев:

  • Для сбоев DNS, которые перенаправляются (URL, который не может быть найден DNS, и вы будете перенаправлены на другую страницу).Все перенаправления (если вы перенаправлены), скорее всего, перейдут на одну и ту же страницу (предоставленную провайдером ISP / DNS), вы можете проверить это.Конечно, если вы попробуете с другим провайдером ISP / DNS, страница может отличаться.Если вы не будете перенаправлены, вы получите ошибку соединения.
  • Для сервера с действительными DNS, но не работающими (например, google.com не работает), должна быть ошибка соединения.
  • Для ресурса («страницы»), отсутствующего на сервере, это более сложно.404 означает, что он сломан, но если сервер не отправляет его, сделать еще немного.Перенаправление может быть полезно, чтобы пометить ссылку как сомнительную, но позже ее следует проверить вручную, поскольку она используется не только для захвата пропущенных ссылок (например, www.google.com перенаправляет меня на www.google.es)
...