Java Struts-Vérificateur de liens morts


Je dois vérifier un ensemble de sites intranet. J'ai essayé d'utiliser le code ci-dessous. (Je viens d'obtenir ce code par recherche aléatoire sur Internet). J'ai appelé cette méthode sur ma classe d'action. Mais la plupart des sites où aller dans la partie exception. Je recevais des exceptions de protocole et UnknownHostException même si j'ai pu ouvrir ces sites à partir de mon navigateur.

Code de référence:

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();  
    }  
  }  
}  
Author: Gonzalo Garcia Lasurtegui, 2011-10-23

2 answers

Je ne pense pas de problème avec le code. Vous avez un délai de connexion de 5 secondes

urlConnection.setConnectTimeout(5000)   

Toute requête qui prend plus de 5 secondes sera considérée comme un lien mort.Votre navigateur a un délai d'attente beaucoup plus long que votre code, vous pouvez donc parcourir ces sites dans le navigateur

 0
Author: bilash.saha, 2011-10-23 10:32:17

Si vous obtenez des exceptions de protocole et des exceptions d'hôte inconnues, nous aurions besoin d'en savoir plus pour vous aider. Votre machine est-elle configurée pour passer par un proxy? Avez-vous des définitions d'hôte qui ne seraient pas partagées par l'utilisateur de votre conteneur d'application?

Envisagez également d'utiliser quelque chose commeHttpClient pour conclure des choses comme celle-ci plutôt que de le faire manuellement; juste trop de travail.

 0
Author: Dave Newton, 2011-10-23 14:56:56