HttpClient

cs_Amine Messages postés 36 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 24 octobre 2007 - 24 oct. 2007 à 13:22
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 - 25 oct. 2007 à 11:42
Bonjour tous le monde !

Au fait, j'ai un problème lors de l'utilisation de la classe HttpClient de Apache (org.apache.commons.httpclient.HttpClient) c'est que lorsque je download une page à partir d'un URL1 et je "coupe" la connexion internet artificiellement (je change de DNS pour que le download echoue), lorsque je lance le download une deuxième fois sur le même URL1 il me retourne le contenu de la page même si la connexion est coupée !!! C'est surement un problème de cache mais je ne sais pas comment le désactiver.

Voici le coode que j'utilise :

//Fonction download
public static String getWebPage(String url) throws Exception  {
  GetMethod get = new GetMethod(url);
  org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
     client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
     client.getParams().setBooleanParameter("http.protocol.allow-circular-redirects", true);
     client.getParams().setSoTimeout(30000);
  client.getParams().setConnectionManagerTimeout(60000);
  get.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
     get.setRequestHeader("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
     get.setRequestHeader("Accept-Language" , "en,en-us;q=0.8,es-es;q=0.5,es;q=0.3");
     get.setRequestHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
     //get.setRequestHeader("Keep-Alive", "300");
     get.setRequestHeader("Connection", "keep-alive");
     get.setRequestHeader("Pragma", "no-cache, no-store");
     get.setRequestHeader("Cache-Control", "no-cache, no-store");
     String s="";
     try {
      client.executeMethod(get);
      byte[] response =  get.getResponseBody();
      s = new String(response,0,response.length,"UTF-8");
      } catch (Exception e) {
    System.out.println("Error or Timeout ! skiping url");
   }
     url = get.getURI().toString();
     get.releaseConnection();
     get=null;
     client=null;
     
     return s;
 }

//Pour le test :

try {
   String s = getWebPage("http://mms-01.rutgers.edu/2004.02.26-Deliverables/BBR/index.html");
   System.out.println(s);
//je debug et avant ce deuxième download, je coupe la connexion et il me donne le même contenu en ss que dans la variable s
   String ss = getWebPage("http://mms-01.rutgers.edu/2004.02.26-Deliverables/BBR/index.html");
   System.out.println(ss);
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

Aidez moi SVP je suis bloqué depuis des jours.

Merci d'avance

5 réponses

cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
24 oct. 2007 à 15:01
Tu crées une GetMethod à chaque appel de getWebPage, ça fait deux connexions différentes. Même si elles utilisent le même client. C'est peut être pour ça.
0
cs_Amine Messages postés 36 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 24 octobre 2007
24 oct. 2007 à 16:04
Salut,

Je ne comprend pas votre réponse... j'appelle getWebPage() deux fois et à chaque appel je cree un nouveau client : org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
donc les objets sont différents à chaque appel.

merci quand même
0
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
24 oct. 2007 à 18:12
Oui c'est moi qui n'a pas bien lu. Deux clients, deux méthodes, mais la même ressource demandée. Pourquoi les deux réponses seraient différentes ?
0
cs_Amine Messages postés 36 Date d'inscription vendredi 24 août 2001 Statut Membre Dernière intervention 24 octobre 2007
24 oct. 2007 à 18:52
La différence entre les 2 appels de la méthode getWebPage(url) c'est que la connexion Internet est disponible pour la première et coupée pour la deuxième, donc logiquement pour le deuxième appel ça doit retourner null ou bien donner une exception... lui il me donne un contenu String non null et qui est égal au résultat du 1er appel avec connexion dispo !

J'espère que c'est claire mnt...
J'attends tjrs votre aide...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_AlexN Messages postés 694 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 8 janvier 2014 19
25 oct. 2007 à 11:42
je ne comprend pas ce que veux dire "je change de DNS". Mais si deux instances de clients http avec chacune leur instance de méthodes demandent la même ressource, même si le serveur de noms n'est pas le même, il n'y a aucune raison pour que les réponses (s et ss) changent. Les deux connexions sont distinctes, mais la ressource demandée est la même, peu importe le chemin pour y arriver.
0
Rejoignez-nous