Abandon de requete httpclient

Abandon de requete httpclient - Java - Programmation

Marsh Posté le 27-02-2013 à 01:03:39    

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.

Reply

Marsh Posté le 27-02-2013 à 01:03:39   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed