Erreur impossible à gérer

Fermé
david11001 Messages postés 14 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 3 mars 2013 - 2 mars 2013 à 17:34
david11001 Messages postés 14 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 3 mars 2013 - 3 mars 2013 à 17:07
Bonjour !

J'utilise une fonction qui permet de récupérer le code source d'un site.
Pour 99% des sites, elle fonctionne, mais parfois j'obtiens cette erreur :

1 mars 2013 17:34:10 org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: I/O exception (java.net.SocketException) caught when processing request: Connection reset
1 mars 2013 17:34:10 org.apache.http.impl.client.DefaultRequestDirector tryExecute
INFO: Retrying request

Je ne cherche pas à corriger l'erreur, puisqu'elle est sûrement causée par les sites dont j'essaye de récupérer le code source.
Je cherche plutôt à afficher un petit message du type "Le site est indisponible" à la place du gros message d'erreur rouge.

Ce que je ne comprends pas c'est que j'ai l'impression de gérer toutes les exceptions qui peuvent arriver, donc comment cela se fait-il que cette erreur survienne ?

Voici le code de la fonction qui permet de récupérer le code source d'une page :

public static String getsource(String url)
{	
	HttpClient httpclient = new DefaultHttpClient();
	httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
	httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
	httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, "ignoreCookies");

	HttpGet httpget = new HttpGet(url);		
	StringBuilder source = new StringBuilder();
	String resa = null;
	
	try
	{ 
		HttpResponse response = httpclient.execute(httpget);
		BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
		
        long ms = System.currentTimeMillis();
        boolean timeout_over = false;
        String line;
        
        while ((line = reader.readLine()) != null && !timeout_over) 
        {
        	source.append(line+"\r\n");
        	if(System.currentTimeMillis()-ms>10000)
        	{ timeout_over = true; }
        }

		if(timeout_over)
		{ 
			resa = "Erreur";
			System.out.println("Timeout Over");
			httpget.abort();
		}
		else
		{ resa = source.toString().trim(); }
        
	} 
	catch(IOException ioe) 
	{
		resa = "Erreur";
		System.out.println("IO exception");
	}
	catch(Exception e)
	{ 
		resa = "Erreur";
		System.out.println("Exception");
	}
	
	return resa;
}


Merci d'avance pour votre aide !

Bonne journée ! :)

3 réponses

walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 73
Modifié par walidovich_85 le 2/03/2013 à 18:35
bonjour,

bon je ne suis pas confirmé en java, mais je sais bien que lorsqu'on veule modifier les message d'erreur, il faut utiliser "throws", par exemple:

try
{
code résussie;

}catch(Exception e)
{
throw new Exception("Le site n'est pas disponible");
}

System.out.print(e.getMessage());
0
david11001 Messages postés 14 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 3 mars 2013
Modifié par david11001 le 2/03/2013 à 19:15
Je suis tout à fait d'accord mais en l'occurrence il y a bien un catch(IOException ioe) dans le code que je propose.

Faudrait-il que je mette un catch(SocketException se) avant le catch(IOException ioe) ? (Edit : je viens d'essayer et ça ne fonctionne pas)
0
david11001 Messages postés 14 Date d'inscription dimanche 24 février 2013 Statut Membre Dernière intervention 3 mars 2013
3 mars 2013 à 17:07
Si quelqu'un a une autre idée je suis preneur ! :)
0