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 :

Connexion sur un site avec Java


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Connexion sur un site avec Java
    Bonjour tout le monde.
    j'essaye de me connecter sur un site internet via un programme Java, grâce à la librairie HttpClient d'apache.

    Donc, j'arrive sans problème à récupérer le code de la page HTML afin de voir les attributs "name" du formulaire.
    le soucis étant que je n'arrive pas à me connecter à mon compte sur le site.
    les formulaire sont en méthode POST.

    voila comment je procède pour essayer de me logguer :

    Code java : 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
    HttpClient client = new HttpClient();
     
     
    	    PostMethod method = new PostMethod("http://www.xxxx.com/app/user");
     
    	    method.addParameter("email", "xxxxxx@gmail.com");
    	    method.addParameter("password", "xxxxxxx");
     
    	    try {
    		      // Execute the method.
    		      int statusCode = client.executeMethod(method);
     
    		      if (statusCode != HttpStatus.SC_OK) {
    		        System.err.println("Method failed: " + method.getStatusLine());
    		      }
     
    		      // Read the response body.
    		      byte[] responseBody = method.getResponseBody();
     
    		      // Deal with the response.
    		      // Use caution: ensure correct character encoding and is not binary data
    		      System.out.println(new String(responseBody));
     
    		    } catch (HttpException e) {
    		      System.err.println("Fatal protocol violation: " + e.getMessage());
    		      e.printStackTrace();
    		    } catch (IOException e) {
    		      System.err.println("Fatal transport error: " + e.getMessage());
    		      e.printStackTrace();
    		    } finally {
    		      // Release the connection.
    		      method.releaseConnection();
    		    }
    comment puis-je m'y prendre?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Rajoute quelques informations, comme le Referer (voir protocole HTTP).

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut
    Désolé je ne comprend ce que tu veux que je rajoute

    normalement ce code doit pouvoir envoyer à l'url, définit dans :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    new PostMethod("http://www.xxxx.com/app/user")
    , les informations par méthode POST afin de valider un formulaire d'authentification mais cela ne marche pas


    Y aurait-il une autre façon de procéder si cette manière de faire c'est pas bonne ?

  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
    Citation Envoyé par Freddo31 Voir le message
    mais cela ne marche pas
    merci de préciser (message d'erreur du serveur, code d'erreur, exceptions, .... ?)

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut
    Quand je dis que cela ne marche pas, c'est qu'on retourne systématiquement sur la page d'accueil mais il n'y aucune erreur qui est retournée

    En fait, je ne sais pas comment m'y prendre pour me logguer sur le site

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    As-tu accès à la source du site web ? (je parle du code source de l'application web, pas de la source HTML)

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut
    C'est bon j'ai réussi à me connecter

    En fait le problème était dans la methode Post (que j'ai changé en méthode GET) pour effectuer la redirection : j'avais oublié de remettre le User-Agent donc ça ne marchais pas

    Voici le code final :

    Code java : 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
    // Create an instance of HttpClient.
    		HttpClient client = new HttpClient();
     
     
    		// utilisation du user-agent de firefox
    		Header header = new Header("User-Agent", "Mozilla/5.0");
     
     
    		PostMethod method = new PostMethod("https://www.xing.com/app/user");
     
    		method.setRequestHeader(header);
    		method.addParameter("login_user_name", "xxxxxx@gmail.com");
    		method.addParameter("login_password", "xxxxxxx");
    		method.addParameter("op", "login");
    		method.addParameter("dest", "/app/startpage?op=home;from_login=1");
    		method.addParameter("perm", "true");
     
     
    		try {
     
    			// Execute the method.   	 
    			int statusCode = client.executeMethod(method);
     
     
    			if (statusCode != HttpStatus.SC_OK) {
    				System.err.println("Method failed: " + method.getStatusLine());
     
    				// si il y a une redirection on l'utilise
    				while (statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
    					String redirectLocation = "";
     
    					//on récupère l'url de la redirection
    					Header locationHeader = method.getResponseHeader("location");
    					if (locationHeader != null) {
    						redirectLocation = locationHeader.getValue();
    					}
     
    					System.out.println(redirectLocation);
     
    					method = new PostMethod(redirectLocation);
    					method.setRequestHeader(header);
     
    					statusCode = client.executeMethod(method);
     
     
     
    				}
    			}
     
     
    			System.out.println("-------------------------------------------------------------");
    			// Read the response body.
     
    			byte[] responseBody = method.getResponseBody();
    			// Deal with the response.
    			// Use caution: ensure correct character encoding and is not binary
    			// data
    			System.out.println(new String(responseBody));
    		} catch (HttpException e) {
    			System.err.println("Fatal protocol violation: " + e.getMessage());
    			e.printStackTrace();
    		} catch (IOException e) {
    			System.err.println("Fatal transport error: " + e.getMessage());
    			e.printStackTrace();
    		} finally {
    			// Release the connection.
    			//method.releaseConnection();
     
    		}


    Merci pour votre aide tchize_ et dingoth

  8. #8
    Membre averti
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Par défaut
    Bonjour,

    J'ai un problème similaire pour me connecter à un site, j'ai remarqué notamment quelques différences :

    Le formulaire fait appel à un service : "https://cas.univ-bpclermont.fr/cas/login?service=http://ent.univ-bpclermont.fr/Login"

    Le texte retourné dans la console eclipse fait apparaître un jsessionid dans la partie action du formulaire.
    J'ai donc trouver ce post (http://www.developpez.net/forums/d86...ication-realm/) qui parle d'une authentification realm mais ne vois pas comment la mettre en oeuvre dans mon cas.


    Voici 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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    package metier;
    import java.io.IOException;
     
    import org.apache.commons.httpclient.Header;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.UsernamePasswordCredentials;
    import org.apache.commons.httpclient.auth.AuthScope;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.methods.PostMethod;
     
    /**
     * A simple example that uses HttpClient to perform a GET using Basic
     * Authentication. Can be run standalone without parameters.
     *
     * You need to have JSSE on your classpath for JDK prior to 1.4
     *
     * @author Michael Becke
     */
    public class BasicAuthentificationExample 
    {
     
        /**
         * Constructor for BasicAuthenticatonExample.
         */
        public BasicAuthentificationExample() {
            super();
        }
     
        public static void main(String[] args) throws Exception 
        {
          HttpClient client = new HttpClient();
     
          // utilisation du user-agent de firefox
          Header header = new Header("User-Agent", "Mozilla/5.0" );
     
     
          PostMethod method = new PostMethod("https://cas.univ-bpclermont.fr/cas/login?service=http://ent.univ-bpclermont.fr/Login" );
     
          method.setRequestHeader(header);
          method.addParameter("username", "xxx" );
          method.addParameter("password", "xxx" );
          method.addParameter("warn","on");
     
          try {
     
           // Execute the method.     
           int statusCode = client.executeMethod(method);
     
     
           if (statusCode != HttpStatus.SC_OK) {
            System.err.println("Method failed: " + method.getStatusLine());
     
            // si il y a une redirection on l'utilise
            while (statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
             String redirectLocation = "";
     
             //on récupère l'url de la redirection
             Header locationHeader = method.getResponseHeader("location" );
             if (locationHeader != null) {
              redirectLocation = locationHeader.getValue();
             }
     
             System.out.println(redirectLocation);
     
             method = new PostMethod(redirectLocation);
             method.setRequestHeader(header);
     
             statusCode = client.executeMethod(method);
     
            }
           }
     
     
           System.out.println("-------------------------------------------------------------" );
           // Read the response body.
     
           byte[] responseBody = method.getResponseBody();
           // Deal with the response.
           // Use caution: ensure correct character encoding and is not binary
           // data
           System.out.println(new String(responseBody));
          } catch (HttpException e) {
           System.err.println("Fatal protocol violation: " + e.getMessage());
           e.printStackTrace();
          } catch (IOException e) {
           System.err.println("Fatal transport error: " + e.getMessage());
           e.printStackTrace();
          } finally {
           // Release the connection.
           //method.releaseConnection();
     
          }
        }
    }
    merci

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

Discussions similaires

  1. Mise à jour des articles sur un site avec Java (JEE)
    Par zikyoubi dans le forum Développement Web en Java
    Réponses: 13
    Dernier message: 25/09/2013, 22h06
  2. Connexion sur un site avec BDD mysql
    Par garona dans le forum Langage
    Réponses: 7
    Dernier message: 12/05/2011, 08h20
  3. Se connecter sur un site avec Java
    Par Mithandir dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 30/12/2008, 10h35
  4. dessiner des cercles sur une image avec java
    Par inès83 dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 04/05/2008, 17h34
  5. programmer sur ecrans "tactiles" avec java
    Par itmak dans le forum Général Java
    Réponses: 3
    Dernier message: 15/07/2007, 09h10

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