Httpclient et pages très lourdes

Fermé
reywas Messages postés 19 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 1 mars 2013 - Modifié par reywas le 27/02/2013 à 00:56
 CGTB - 14 avril 2013 à 22:14
Bonjour,

Pour faire simple, j'ai une longue liste d'url dans une base de données et mon but est de récupérer le code source de ces url. Dans ma base se trouvent parfois des url vers des pdf de 50Mo et quand je fais un GET sur cette page, ben c'est très long à récupérer.
Quand je tombe sur des PDF ou pages de plus de 2Mo, j'aimerai tout simplement passer à l'url suivante.

Voici mon code :

public String getsource(HttpClient httpclient, String url)
{	
	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)
    		{ 
    			System.out.println("Page trop lourde"); 
    		}
    		else
		{
    			resa = source.toString().trim();
		}
            
	} 
	catch(IOException ioe) 
	{
		ioe.printStackTrace();
	}
	catch(Exception e)
	{ 
		e.printStackTrace();
	}
		
	return resa;
}


Actuellement, je lis ligne par ligne et si ça prend plus de 10 secondes j'arrète simplement de lire.

Le problème :
- Si je ne lis pas toutes les lignes, alors quand j'utilise ma fonction getsource pour l'url suivante, j'ai cette erreur: Make sure to release the connection before allocating another one.
- Si je réinitialise httpclient alors ça règle le problème mais du coup je perd les éventuels cookies créés (que je souhaite garder) et de toutes façon je souhaite pas forcément recrée le HttpClient à chaque nouvelle url.

Quelqu'un aurait une idée ? :)

Merci d'avance et bonne soirée.
A voir également:

3 réponses

reywas Messages postés 19 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 1 mars 2013 1
27 févr. 2013 à 19:04
Toujours pas trouvé de solution... :/

Quelqu'un peut m'aider ? :)
0
reywas Messages postés 19 Date d'inscription dimanche 29 août 2010 Statut Membre Dernière intervention 1 mars 2013 1
28 févr. 2013 à 19:55
Je n'y arrive vraiment pas ! :/
0
Utilise EntityUtils.consume(response.getEntity()); pour vider ton buffer, c'est ça qui pose problème
0