Erreur impossible à gérer

david11001 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -  
david11001 Messages postés 14 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   73
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
Si quelqu'un a une autre idée je suis preneur ! :)
0