Gestion des erreurs de connexion et JSoup
Je suis en train de créer une application pour gratter le contenu de plusieurs pages sur un site. Je suis à l'aide de JSoup pour vous connecter. C'est mon code:
for (String locale : langList){
sitemapPath = sitemapDomain+"/"+locale+"/"+sitemapName;
try {
Document doc = Jsoup.connect(sitemapPath)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.get();
Elements element = doc.select("loc");
for (Element urls : element) {
System.out.println(urls.text());
}
} catch (IOException e) {
System.out.println(e);
}
}
Tout fonctionne parfaitement, la plupart du temps. Cependant, il ya quelques choses que je veux être en mesure de le faire.
Tout d'abord parfois un statut 404 sera de retour ou un 500 statut peut-être une 301. Avec mon code ci-dessous, il vous suffit d'imprimer l'erreur et de se déplacer sur le lien suivant. Ce que je voudrais être en mesure de faire est d'essayer d'être en mesure de retourner l'url de l'état de tous les liens. Si la page se connecte d'impression de 200, si pas imprimer les code d'état.
Deuxièmement, j'ai parfois rattraper cette erreur "java.net.SocketTimeoutException: Read timed out" je pourrais augmenter mon délai d'attente cependant, je préfère essayer de connecter 3 fois, à défaut de la 3ème fois que je veux ajouter l'URL d'un "échec" de la matrice de sorte que je peux retenter l'échec de la connexion à l'avenir.
Quelqu'un peut plus de connaissance que moi m'aider?
Vous devez vous connecter pour publier un commentaire.
Pour votre première question, vous pouvez faire de votre connexion/lire en deux étapes, en vous arrêtant pour demander le code d'état dans le milieu de la sorte:
Noter que le
execute()
méthode échoue avec unIOException
si elle est incapable de se connecter sur le serveur, si la réponse est incorrect HTTP, etc., de sorte que vous aurez besoin pour ce faire. Toutefois, tant que le serveur a dit quelque chose qui a du sens, vous serez capable de lire le code d'état et de continuer. Aussi, si vous avez demandé à Jsoup de suivre les redirections, vous ne serez pas voir30x
codes de réponse b/c Jsoup permettra de configurer le code de statut à partir de la dernière page par les cheveux.Quant à votre deuxième question, vous avez besoin d'une boucle autour de l'exemple de code que je viens de vous qui est enveloppé avec un bloc try/catch avec
SocketTimeoutException
. Quand vous prenez l'exception, la boucle doit continuer. Si vous êtes en mesure d'obtenir les données, puis de retour ou de pause. Crier, si vous avez besoin de plus d'aide avec elle!Ci-dessus renvoie une IOException pour moi plutôt que de le execute() pour retourner le code d'état correct.
À l'aide de JSoup-1.6.1 j'ai dû changer le code ci-dessus pour utiliser ignoreHttpErrors(vrai).
Maintenant, quand le code renvoie la réponse plutôt que de lancer une exception, et vous pouvez vérifier les codes d'erreur/messages.
De sortie: