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 :

Authentification avec HttpClient


Sujet :

API standards et tierces Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut Authentification avec HttpClient
    Bonjour à tous,

    Je debute en programmation, donc je m'excuse d'avance si certaines partie de mon code vous sembleront abérantes.

    Voici donc mon projet :
    J'essaye de crée une sorte de robot pour mon frère, qui permettrai de se connecter à son jeu, et une fois connecté, de récupérer certaines informations automatiquement.

    Je me suis donc mis au travail, je me suis dis que pour essayer de crée certain robot, ce serait une bonne façon de commencer.

    le site en question est : www.terredesrois.com (j'ai cru comprendre que le system de login, avait une importance pour le programme)

    J'ai reussi à crée le code permettant de recuperer dans un page HTML uniquement les informations contenu dans certaine ID des balises <div> (afin de recuperer uniquement ce que je veux)

    Le problème, c'est que pour pouvoir recuperer ceci, il me faut le code source de la page. Hors, je n'arrive pas à acceder à la page en question, car il faut se connecter au préalable sur le site, et c'est là que ca coince.

    Voici donc mon code :

    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
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    DefaultHttpClient httpclient = new DefaultHttpClient();
     
         httpclient.setRedirectStrategy(new DefaultRedirectStrategy() {                
                public boolean isRedirected(HttpRequest request, HttpResponse response, HttpContext context)  {
                    boolean isRedirect=false;
                    try {
                        isRedirect = super.isRedirected(request, response, context);
                    } catch (ProtocolException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    if (!isRedirect) {
                        int responseCode = response.getStatusLine().getStatusCode();
                        if (responseCode == 301 || responseCode == 302) {
                            return true;
                        }
                    }
                    return isRedirect;
                }
            });
     
        try {
     
            HttpPost httppost = new HttpPost("http://www.terredesrois.com");
     
             CookieStore cookieStore = new BasicCookieStore();         
                      httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1");
             httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); 
     
             HttpContext context = new BasicHttpContext();
                 context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
     
     
            ResponseHandler<String> gestionnaire_reponse = new BasicResponseHandler();
            String reponse = null;
     
            List<NameValuePair> parametres = new ArrayList<NameValuePair>();
            parametres.add(new BasicNameValuePair("login", "Username"));
            parametres.add(new BasicNameValuePair("motpass", "Userpass"));
     
     
                    try {
                UrlEncodedFormEntity entite = new UrlEncodedFormEntity(parametres, "UTF-8");
                httppost.setEntity(entite);
     
            } catch (UnsupportedEncodingException e) {
                System.err.println(e);
            }
     
            try {
                HttpResponse response = httpclient.execute(httppost, context);
     
                httppost.releaseConnection();
     
                HttpGet httpget = new HttpGet("http://www.terredesrois.com/ville/ville/bat/pages_mod/militaire/aff-frame/aff.frame_page-etat.php3?id_unite=61540");
     
     
                    HttpResponse reponse2= null;
                reponse2 = httpclient.execute(httpget, context);
                HttpEntity entity = reponse2.getEntity();
                System.out.println(EntityUtils.toString(entity));
     
     
     
     
            } catch (ClientProtocolException e) {
                System.err.println(e);
            } catch (IOException e) {
                System.err.println(e);
            }
            } finally {
                httpclient.getConnectionManager().shutdown();
            }
    Avec ce code, j'espère recuperer le code source de la page mis en URL dans le httpget, cependant, lorsque j'execute, je recupère le code source de la page qui me dit "Vous ne pouvez pas acceder au site, erreur d'authentification" (comme si je ne m'étais pas log avant quoi)

    Merci d'avance pour votre aide !
    Et encore desolé si mon code est "sale", j'en suis au essai, et je debute en matière de programmation.

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Ce n'est pas de cette manière que tu t'en sortiras : l'authentification se fait par un formulaire HTML et non par le pop-up d'authentification basique ou digest. Il faut d'abord que tu fasses un post sur l'URL d'authentification pour récupérer un cookie de session valide, puis tu réutilises ce cookie sur tous les appels suivants.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2
    Par défaut
    Après avoir regarder le code JS en détail, je me suis appercu que l'authentification se fait par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.terredesrois.com/tools/connexion/chargerGabaritUser?log=username&pass=password
    Donc une methode en get. Je dois donc faire une methode de type get ? De ce style la :

    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
    HttpGet GET = new HttpGet("http://www.terredesrois.com/tools/connexion/chargerGabaritUser?log=username&pass=password");
     
             CookieStore cookieStore = new BasicCookieStore();       
             httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1");
             httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY);
     
             HttpContext context = new BasicHttpContext();
             context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
     
     
     
     
     
     
     
            try {
                HttpResponse response = httpclient.execute(GET, context);
     
                httppost.releaseConnection();
     
                HttpGet httpget = new HttpGet("http://www.terredesrois.com/ville/ville/bat/pages_mod/militaire/aff-frame/aff.frame_page-etat.php3?id_unite=61540");
     
     
                    HttpResponse reponse2= null;
                reponse2 = httpclient.execute(httpget, context);
                HttpEntity entity = reponse2.getEntity();
                System.out.println(EntityUtils.toString(entity));
     
     
     
     
            } catch (ClientProtocolException e) {
                System.err.println(e);
            } catch (IOException e) {
                System.err.println(e);
            }
            } finally {
                httpclient.getConnectionManager().shutdown();
            }
    Car cela ne marche toujours pas. Pourtant je recupère le cookie, et ensuite l'envoie sur chaque URL.

    Merci de votre aide !

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Tu ne peux pas enchaîner tes 2 requêtes sans t'assurer que la première à fonctionner. Il faut absolument que tu vérifies et traces le résultat de la première requête.

    Dans tous les cas, il faut que tu valides ton histoire de requête GET avant de te lancer dans le code. Il faut tout simplement que tu enchaînes les 2 appels GET avec un navigateur et un outil du style LiveHTTPHeaders de Firefox pour tout voir. Bien évidemment, tu auras vidé le cache et les cookies du navigateur avant de tester pour te rapprocher le plus possible de ce qui va se passer dans ton code Java.

Discussions similaires

  1. Page d'authentification avec jsp
    Par taroudant dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 19/07/2006, 09h24
  2. prob d'authentification avec Java Script !!!!!
    Par King_T dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/05/2006, 19h18
  3. Réponses: 2
    Dernier message: 10/05/2006, 07h50
  4. Pas de fenètre d'authentification avec .htaccess
    Par damjal dans le forum Apache
    Réponses: 2
    Dernier message: 02/11/2005, 08h40
  5. [MySQL] mécanisme d'authentification avec BD
    Par lalyly dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/10/2005, 13h26

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