IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

HttpClient et jsessionid


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut HttpClient et jsessionid
    Bonjour à tous,

    Tout d'abord désolé, j'ai posté ce message d'abord dans la catégorie Logging avant de me raviser et de le poster ici où je pense qu'il a plus sa place.
    Je n'ai pas trouvé comment le supprimer (si c'est possible) dans Logging

    J'essaye de reproduire un locale (pour mon utilisation personnelle) une copie de quelques articles du code de la propriété intellectuelle depuis Légifrance.
    J'utilise pour cela l'API HttpComponents Client 4.1 d'Apache. Pas de problème jusque là.
    Mon problème commence lorsque je télécharge certaines pages qui m'intéressent avec mon client maison et que je ne récupère pas la totalité du code HTML que j'aurais avec un navigateur.
    J'ai fait différents tests et je pense que mon problème vient du fait que le serveur ne reconnait pas ma session.

    Voici le type de page que je souhaite obtenir :
    http://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid=26922729D310BF83202B76B54B9F16E7.tpdjo03v_1?idArticle=LEGIARTI000006278868&cidTexte=LEGITEXT000006069414&dateTexte=20110811
    Ce qui m'intéresse surtout c'est de pouvoir accéder à l'historique de l'article (à gauche) or c'est précisemment ce que je n'arrive pas à récupérer depuis mon client. Le seul moyen que j'ai trouvé pour y accéder est de d'abord créer une session avec mon navigateur pour récupérer le jsessionid puis de télécharger la page depuis mon client en insérant le jsessionid, doù ma thérie de la session non-reconnue (mais je peux me planter...).
    Bref je commence à me taper la tête sur ma table et mon chat me regarde bizarrement... c'est pour ça que j'appelle à l'aide.
    Ci-dessous le code de mon mini-client (pompé à droite à gauche et codé avec les pieds... un petit client de test quoi)

    Je remercie très sincèrement celui ou ceux qui pourront m'orienter vers une solution.

    Pour ceux qui auraient des doutes, cela n'a rien d'illégal dans la mesure où l'utilisation n'est pas commerciale et que les textes de codes sont en principe libre de droit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    public class clientHttp {
    static String path = "fichier";
    	static int n = 0;
    	static String idSession ="";
    	static HttpClient httpclient = new DefaultHttpClient();
    	static HttpContext localContext = new BasicHttpContext();
    	static  HttpGet httpget;
    	static List<Cookie> cookies;
    	static CookieStore cookieStore; 
     
    	public final static void main(String[] args) throws Exception {
     
     
            try {
                cookieStore = new BasicCookieStore();
                localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
                httpget = new HttpGet("http://www.legifrance.gouv.fr");
                httpget.getParams().setParameter(
                		ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
     
                executeRequest();
                afficheCookies();         
     
                httpget.setURI(new URI("http://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid="+idSession+"?idArticle=LEGIARTI000006278868&amp;cidTexte=LEGITEXT000006069414"));
                executeRequest();
                afficheCookies();
     
            } finally {
                httpclient.getConnectionManager().shutdown();
            }
        }
     
    	public static void executeRequest() throws ClientProtocolException, IOException{
    		System.out.println("\nexecuting request " + httpget.getURI());
    		HttpResponse response = httpclient.execute(httpget, localContext);
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                System.out.println("Response content length: " + entity.getContentLength());
                n++;
                File f = new File(path+""+n+".html");
                FileOutputStream fos = new FileOutputStream(f);
                InputStream instream = entity.getContent();
    		    int l;
    		    while ((l = instream.read()) != -1) {
    		    	fos.write(l);
    		    }       
            }
            // Consume response content
            EntityUtils.consume(entity);
     
    	}
     
    	public static void afficheCookies(){
    		cookies = cookieStore.getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("Local cookie: " + cookies.get(i));
            }
            System.out.println("----------------------------------------");
    	}
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la session, c'est le serveur qui la crée, pas ton client. Tu dois donc
    1) te connecter au site avec ton code
    2) récupérer la première page
    3) extraire de la première page le sessionid que tu devra utiliser par la suite.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    la session, c'est le serveur qui la crée, pas ton client. Tu dois donc
    1) te connecter au site avec ton code
    2) récupérer la première page
    3) extraire de la première page le sessionid que tu devra utiliser par la suite.
    Oui c'est bien comme ça que je le vois aussi et je pensais déja faire comme ça.

    Voici la trace de mon programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    executing request http://www.legifrance.gouv.fr
    Response content length: -1
    Local cookie: [version: 0][name: JSESSIONID][value: 5FFD76023857CAC9C253FF45F43F19C9.tpdjo05v_1][domain: www.legifrance.gouv.fr][path: /][expiry: null]
    ----------------------------------------
     
    executing request http://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid=?idArticle=LEGIARTI000006278868&amp;cidTexte=LEGITEXT000006069414
    Response content length: -1
    Local cookie: [version: 0][name: JSESSIONID][value: 5FFD76023857CAC9C253FF45F43F19C9.tpdjo05v_1][domain: www.legifrance.gouv.fr][path: /][expiry: null]
    ----------------------------------------
    Je récupère bien le cookie avec le jsessionid puis je l'insère dans mon get suivant, mais rien à faire la partie gauche (l'historique) ne figure pas dans le fichier que je télécharge.
    Il y a un truc que je dois manquer...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    si j'en juge par votre deuxième requete, le jsession_id n'est pas présent dans l'url.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    si j'en juge par votre deuxième requete, le jsession_id n'est pas présent dans l'url.
    Exact, avec tous mes différents tests, j'ai posté un mauvais code... mea culpa

    En fait, j'avais oublié une ligne dans mon afficheCookies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static void afficheCookies(){
    public static void afficheCookies(){
    		cookies = cookieStore.getCookies();
            for (int i = 0; i < cookies.size(); i++) {
                System.out.println("Local cookie: " + cookies.get(i));
                idSession = cookies.get(i).getValue(); //cette ligne
            }
            System.out.println("----------------------------------------");
    	}
    	}
    Et donc voici la trace maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    executing request http://www.legifrance.gouv.fr
    Response content length: -1
    Local cookie: [version: 0][name: JSESSIONID][value: 66807E99D597B5AEFDA042B280054558.tpdjo17v_2][domain: www.legifrance.gouv.fr][path: /][expiry: null]
    ----------------------------------------
     
    executing request http://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid=66807E99D597B5AEFDA042B280054558.tpdjo17v_2?idArticle=LEGIARTI000006278868&amp;cidTexte=LEGITEXT000006069414
    Response content length: -1
    Local cookie: [version: 0][name: JSESSIONID][value: 66807E99D597B5AEFDA042B280054558.tpdjo17v_2][domain: www.legifrance.gouv.fr][path: /][expiry: null]
    ----------------------------------------
    Mais le problème reste malheureusement le même..

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Dans ce cas ce n'est pas ça le problème. Essayez de changer le user agent de commons httpclient pour vous faire passer pour un navigateur normal et non pas un robot. Pas mal de site on des rendus différents en fonction de l'agent.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 7
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Dans ce cas ce n'est pas ça le problème. Essayez de changer le user agent de commons httpclient pour vous faire passer pour un navigateur normal et non pas un robot. Pas mal de site on des rendus différents en fonction de l'agent.
    Un grand grand merci, ça fonctionne parfaitement en changeant l'user-agent.

    J'ai juste ajouter la ligne suivante après l'affectation de mon premier httpget :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    httpget.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1");
    Pour ceux que ça intéresse la liste des User-agents se trouve facilement sur Wikipedia :
    http://fr.wikipedia.org/wiki/User-Agent

    A pus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [API] HttpClient
    Par eyghon dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/12/2005, 00h22
  2. [HttpClient][Encodage] Caractère '?'
    Par nicolas.charlot dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 20/07/2005, 10h33
  3. [HTTPClient] Listes a choix multiples
    Par The Wretched dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 06/04/2005, 15h25
  4. [Struts] Pbms de références - champ jsessionid
    Par PeteMitchell dans le forum Struts 1
    Réponses: 14
    Dernier message: 13/04/2004, 15h02
  5. [HttpClient] comportement bizarre, saute des catch()...
    Par iubito dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 04/02/2004, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo