Java Struts - Проверка мертвых ссылок - PullRequest
1 голос
/ 23 октября 2011

Мне нужно проверить набор интранет сайтов. Я пытался использовать приведенный ниже код. (Просто получил этот код при случайном поиске в интернете). Я вызвал этот метод в своем классе действий. Но большинство сайтов куда входят в исключительную часть. Я получал исключения протокола и UnknownHostException, хотя я смог открыть эти сайты из своего браузера.

Код для справки:

public boolean isLive(String link) {  
  HttpURLConnection urlConnection = null;  
  try {  
    URL url = new URL(link);  
    urlConnection = (HttpURLConnection) url.openConnection();  
    urlConnection.setRequestMethod("HEAD");  
    urlConnection.setConnectTimeout(5000); /* timeout after 5s if can't connect */  
    urlConnection.setReadTimeout(5000); /* timeout after 5s if the page is too slow */  
    urlConnection.connect();  
    String redirectLink = urlConnection.getHeaderField("Location");  
    if (redirectLink != null && !link.equals(redirectLink)) {  
      return isLive(redirectLink);  
    } else {  
      return urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK;  
    }  
  } catch (Exception e) {  
    return false;  
  } finally {  
    if (urlConnection != null) {  
      urlConnection.disconnect();  
    }  
  }  
}  

Ответы [ 2 ]

0 голосов
/ 23 октября 2011

Если вы получаете исключения протокола и неизвестные хост-исключения, нам нужно знать больше, чтобы помочь.Ваша машина настроена на прохождение через прокси?У вас есть определения хоста, которые не будут передаваться пользователю контейнера вашего приложения?

Кроме того, рассмотрите возможность использования чего-то вроде HttpClient , чтобы обернуть подобные вещи, а не делать это вручную;слишком много работы.

0 голосов
/ 23 октября 2011

Я думаю, нет проблем с кодом.Тайм-аут соединения составляет 5 секунд

urlConnection.setConnectTimeout(5000)   

Любой запрос, который занимает более 5 секунд, будет считаться недействительной ссылкой. Ваш браузер имеет гораздо более длительный тайм-аут, чем ваш код, поэтому вы можете просматривать эти сайты вбраузер

...