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

Java Discussion :

java et cookies de site web


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 128
    Par défaut java et cookies de site web
    Bonjour,
    Via une appli java swing, je cherche à me connecter à un site web qui gère sa navigation via un système de cookies.
    Le code suivant me renvoie les en-tetes html et donc les differents ordres de création de cookies.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    URL url = new URL("MyUrl");
    connection = (HttpURLConnection)url.openConnection();
    Map<String,List<String>> headerFields = connection.getHeaderFields();
    Set<String> set = headerFields.keySet();
    Iterator<String> itor = set.iterator();
    while (itor.hasNext()) {
        String key = itor.next();
        System.out.println("Key: " + key + " / " + headerFields.get(key));
    }
    ca marche bien avec http://java.sun.com par exemple.

    Mais ca ne semble pas fonctionner avec tout les sites webs. Dans mon cas je cherche à me connecter à un site privé qui crée bien un cookie comme je peux le voir via le gestionnaire de cookies de Firefox mais la commande java ci dessus ne me renvoie rien niveau cookies.
    en testant les sites qui m'ont créés des cookies j'ai trouvé le site www.geoportail.fr qui semble avoir le mm comportement dans ses en-tetes.
    Si je me connecte via firefox, 2 cookies sont créés alors que le code java précédent ne renvoie rien de concret.

    Des idées?

    Merci d'avance pour toute suggestion!

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Je viens de tester avec Firefox et l'extension "Http Live Header", et j'obtiens ceci lorsque je vais sur geoportail.fr :
    http://www.geoportail.fr/

    GET / HTTP/1.1
    Host: www.geoportail.fr
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    If-Modified-Since: Fri, 22 Aug 2008 02:05:13 GMT

    HTTP/1.x 302 Found
    Date: Fri, 22 Aug 2008 12:52:41 GMT
    Server: Apache
    Set-Cookie: jknch=hcnkj; path=/; domain=geoportail.fr
    Location: http://jeton.geoportail.fr/?u=%68%74...37%2F%6C%D8%00
    Content-Length: 0
    Keep-Alive: timeout=1, max=100
    Connection: Keep-Alive
    Content-Type: text/html
    ----------------------------------------------------------
    http://jeton.geoportail.fr/?u=%68%74...37%2F%6C%D8%00

    GET /?u=%68%74%74%70%3A%2F%2F%77%77%77%2E%67%65%6F%70%6F%72%74%61%69%6C%2E%66%72%2F&s=%77%77%77&x=%72%33%46%37%2F%6C%D8%00 HTTP/1.1
    Host: jeton.geoportail.fr
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Cookie: jknch=hcnkj

    HTTP/1.x 302 Found
    Date: Fri, 22 Aug 2008 12:52:41 GMT
    Server: Apache
    Set-Cookie: ign=MTIxOTQxMDE2MTMzMzc0OTsxOTUuMTAxLjIwOC4xMDM=; path=/; domain=geoportail.fr
    Location: http://www.geoportail.fr/
    Content-Length: 0
    Keep-Alive: timeout=15, max=100
    Connection: Keep-Alive
    Content-Type: text/html
    ----------------------------------------------------------
    http://www.geoportail.fr/

    GET / HTTP/1.1
    Host: www.geoportail.fr
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Connection: keep-alive
    Cookie: jknch=hcnkj; ign=MTIxOTQxMDE2MTMzMzc0OTsxOTUuMTAxLjIwOC4xMDM=

    HTTP/1.x 200 OK
    Date: Fri, 22 Aug 2008 12:52:41 GMT
    Server: Apache
    Cache-Control: max-age=0
    Expires: Fri, 22 Aug 2008 02:06:00 GMT
    Xcache: Version 1.2 for Apache 2.0
    Last-Modified: Fri, 22 Aug 2008 02:06:00 GMT
    Content-Length: 23476
    Keep-Alive: timeout=1, max=99
    Connection: Keep-Alive
    Content-Type: text/html;charset=utf-8
    En gros l'accès à www.geoportail.fr redirige vers une autre URL qui crée le Cookie, et qui redirige à nouveau vers la première page.

    Comme les redirections sont bien géré par HttpURLConnection, tu passes à travers (il y a 3 aller/retour et le cookie est dans la dernière, mais tu récupères les infos de la dernière page seulement).


    Les solutions que je vois :
    • Utiliser connection.setInstanceFollowRedirects(false) pour éviter que la classe HttpURLConnection suivent les redirections. Mais tu devras alors le gérer à la main
    • Utiliser une implémentation de CookieHandler qui récupérera et enverra les cookies sur les flux de chaque requêtes (Java 5.0). Avec Java 6 tu pourrais utiliser directement CookieManager.
    • Utiliser une librairie tierce fait pour cela, comme Jakarta HttpClient, qui propose des fonctions plus évoluées...



    a++

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 128
    Par défaut CookieManager
    Hello!

    d'abord merci pour ta réponse et "Http Live Header"!

    j'élimine la première solution, trop galère

    je suis en Java6, j'ai dc regardé CookieManager

    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
     
    CookieManager cm = new CookieManager();
    cm.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
    CookieHandler.setDefault(cm);
    try {
                URL url = new URL("http://www.geoportail.fr");
                //URL url = new URL("http://java.sun.com");
     
                connection = (HttpURLConnection)url.openConnection();
                connection.setInstanceFollowRedirects(Boolean.TRUE);
                connection.setFollowRedirects(Boolean.TRUE);
                connection.setRequestProperty ( "User-agent", "Mozilla/5.0" );
                connection.getContent();
                System.out.println("nb cookies :" + cm.getCookieStore().getCookies().size() + "\n"+cm.getCookieStore().getCookies());
     
            } catch (Exception ex) {
                System.out.println(ex.getMessage());
                System.out.println(ex.getStackTrace());
            }
    marche apparement sans pb pour http://java.sun.com
    mais nada pour http://www.geoportail.fr

    toutefois, si j'accède simplement à http://geoportail.fr, je récupère bien un des 2 cookies créés (celui appelé jknch, ie apparement le premier à être généré).
    Mais aucune trace du second.

    Qqu saurait m'éclairer?

    Merci!

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 128
    Par défaut
    Hello!

    j'ai regardé du côté de la très complète lib HttpClient, mais sans plus de succès...

    Pas de soucis à récupèrer les cookies d'un site "standard" (ex java.sun.com) mais le vide sidéral pour mon site problématique comme pour geoportail.fr.


    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
        public static void main(String[] args) throws Exception {
            System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
            System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
            System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire.header", "debug");
            System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "debug");
     
            HttpClient client = new HttpClient();
            client.getParams().setParameter("http.useragent", "Mozilla/5.0");
            client.getParams().setConnectionManagerTimeout(30000);
            //client.getHostConfiguration().setProxy("Myproxy", 8080);
            client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
     
            try {
                //GetMethod get = new GetMethod("http://java.sun.com");
                GetMethod get = new GetMethod("http://geoportail.fr");
                client.executeMethod(get);
                Cookie[] cookies = client.getState().getCookies();
                for (int i = 0; i < cookies.length; i++) {
                    Cookie cookie = cookies[i];
                    System.err.println(
                            "Cookie: " + cookie.getName() +
                            ", Value: " + cookie.getValue() +
                            ", IsPersistent?: " + cookie.isPersistent() +
                            ", Expiry Date: " + cookie.getExpiryDate() +
                            ", Comment: " + cookie.getComment());
                }
     
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    Je fais quoi de mal dans mon code là?

    Merci d'avance!!!

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 128
    Par défaut
    En fait une fois les cookies système et le cache vidé (ainsi que et surtt dans mon cas, ceux du proxy), le code précédent pour HttpClient marche sans pb et récupère tout les entetes des multiples redirections et donc mes multiples cookies!

    Donc merci!

    Mais si qqu a un moyen pour faire marcher le code avec le CookieManager, je suis preneur aussi!!

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

Discussions similaires

  1. Réponses: 24
    Dernier message: 05/07/2011, 16h29
  2. Environnement de développement pour un site Web en Java
    Par miagomiago dans le forum Debian
    Réponses: 8
    Dernier message: 19/07/2007, 17h59
  3. [AJAX/XML/JAVA] Afficher un flux de données depuis un site web
    Par chodaboy34 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/10/2006, 16h38
  4. [Cookies] Langue par défaut sur un site web
    Par Jet-Li dans le forum Langage
    Réponses: 3
    Dernier message: 09/12/2005, 20h52

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