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

Services Web Java Discussion :

HttpClient, dévérouiller une page web avec la méthode POST


Sujet :

Services Web Java

  1. #1
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut HttpClient, dévérouiller une page web avec la méthode POST
    Bonjour à tous,

    Je cherche à récupérer des informations de machines (imprimantes), et pour se faire, je passe par les IPs machines qui constitue une URL référencé par le constructeur.
    Jusque là tout va très bien !

    Seulement certain des rapports disponible sur le référencement sont protégés par des mots de passes. La page se présente donc de cette façon:
    Mot de passe : _____________
    [Bouton soumettre]

    Une fois le mot de passe correcte, et le submit enclenché, la page se débloque et affiche le rapport.
    J'ai donc fait en sorte de pouvoir rentrer le mot de passe et de l'envoyer en post via HttpPost de HttpClient.

    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
     
    String str = JOptionPane.showInputDialog(null, "Présence de mot de passe\n" + this.idConnexion,"Erreur !", JOptionPane.ERROR_MESSAGE);
    				List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    				formparams.add(new BasicNameValuePair("login_form", str));
    				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
    				CloseableHttpClient httpclient = HttpClients.createDefault();
    				HttpPost httppost = new HttpPost("http://" + this.getIdConnexion() +"/cgi-bin/posttest/printer/login.html");
    				httppost.setEntity(entity);
    				System.out.println(httppost.getURI());
     
    				ResponseHandler<String> rh = new ResponseHandler<String>() 
    				{
    					@Override
    					public String handleResponse(final HttpResponse response) throws IOException 
    					{
    						StatusLine statusLine = response.getStatusLine();
    						HttpEntity entity = response.getEntity();
    						if (statusLine.getStatusCode() >= 300) 
    						{
    							throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
    						}
    						if (entity == null) 
    						{
    							throw new ClientProtocolException("Response contains no content");
    						}
    						ContentType contentType = ContentType.getOrDefault(entity);
    						Charset charset = contentType.getCharset();
    						Reader reader = new InputStreamReader(entity.getContent(), charset);
    						//j'ai tenter un retour en String pour afficher le contenu
    					}
    				};
    				String ligne = httpclient.execute(httppost, rh);
    				System.out.println("CEST OK" + ligne);
    J'ai aucune idée de si la méthode POST déclenche l'activation du submit, de si il ne faudrait pas mettre en place un keepAlive, ou meme passer par les servLets.
    Je rappel que le but et qu'une fois le mot de passe entré, la page se débloque et donne accés au rapport, et ensuite moi je réimplémente mon cheminement habituel, comme pour les machines non protégé.

    Le mot de passe est bon puisque je test sur une seule machine pour en être certain du fonctionnement du programme.

    Est ce que vous aves des solutions à me proposer, pour débloquer mon chmilblique !?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Utilse la même instance de client (HttpClient) tout au long des échanges, avec une instance de contexte unique (LocalContext).

    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
    try( CloseableHttpClient httpClient = createHttpClient()) { // création d'une instance unique de client
     
    			final HttpClientContext localContext = HttpClientContext.create(); // création d'une instance unique de contexte
     
    			connection(httpClient, localContext); // post du formulaire pour la connexion
     
    			request1(httpClient, localContext);
    			request2(httpClient, localContext);
                            ...
     
     
     
    	    } catch (IOException e) {
    			... à traiter ...
    		}
    Un exemple de post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    post(CloseableHttpClient httpClient, HttpClientContext localContext, String url, HttpEntity entity) throws IOException, ... {
    final HttpPost httpPost = new HttpPost(url);
    httpPost.setEntity(entity);
    try(CloseableHttpResponse response = httpClient.execute(httpPost, localContext)) { // utilisation conjointe de l'instance de httpclient et localcontext
        checkState(localContext);
     
        final HttpEntity responseEntity = response.getEntity();
     
                            ... traitement....
        }
     
    }....
    et un get
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    final HttpGet httpGet = new HttpGet(url); 
    try (CloseableHttpResponse response = httpClient.execute(httpGet, localContext)) {
     
    	checkState(localContext);
     
    	final HttpEntity responseEntity = response.getEntity();
     
                            ... traitement ...
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    protected void checkState(HttpClientContext localContext) throws IOException {
    	final AuthState targetAuthState = localContext.getTargetAuthState();
    	if ( targetAuthState.getState()==AuthProtocolState.FAILURE ) { 
    			throw new AuthenticationFailureException("Authentication failure", targetAuthState); // classe person étendant IOException
    	}
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Un exemple de post :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    post(CloseableHttpClient httpClient, HttpClientContext localContext, String url, HttpEntity entity) throws IOException, ... {
    final HttpPost httpPost = new HttpPost(url);
    httpPost.setEntity(entity);
    try(CloseableHttpResponse response = httpClient.execute(httpPost, localContext)) { // utilisation conjointe de l'instance de httpclient et localcontext
        checkState(localContext);
     
        final HttpEntity responseEntity = response.getEntity();
     
                            ... traitement....
        }
     
    }....
    [/CODE]
    D'accord mais justement là c'est le traitement de la réponse que j'ai besoin... je veux juste savoir textuellement si il me retourne la page débloqué ? Car au final en y apportant des modifications je me retrouve au même point que précédemment...

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu peux récupèrer le contenu de la page par entity.getContent() et la parser par exemple (genre avec jsoup)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try(final InputStream inputStream = entity.getContent()) {
     
        final Document document = Jsoup.parse(inputStream, httpResponse.getCharset().name(), base.getURI().toString());
     
        test(document); // recherche un élément reconnaissable dans ta page (le titre, ou autre), ou un élément reconnaissable de page de login qui voudrait dire que tu n'es pas logué
     
    }
    Regarde quand même si le post ne cache pas une authenfication (dite form), ce qui permettrait simplement d'utiliser la méthode checkState, sans avoir à analyser le contenu de la page.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    D'accord je ne connaissais pas du tout cette méthode !

    En revanche, voici ce que contient document au final:
    <html>
    <head></head>
    <body>
    login_form=motdepasse
    </body>
    </html>

    et là c'est embêtant .... car il ne prend pas la page dévérouillé.

    J'ai d'ailleurs trouvé quelque chose d'intéressant qui pourrait aider !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    try(final InputStream inputStream = entity.getContent()) {....} //entity de httppost
    il me donne ça:
    <html>
    <head></head>
    <body>
    login_form=motdepasse
    </body>
    </html>

    et quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    try(final InputStream inputStream = responseEntity.getContent()) {....} //entity de HttpResponse
    il me donne ça:
    <html>
    <head></head>
    <body> </body>
    </html>

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'était une réponse de principe ! C'est bien l'entity de la réponse qu'il faut exploiter pour exploiter la réponse, forcément.

    Le html de l'entity de la réponse ne correspond pas à la page que tu attends ? Est-ce qu'il n'y aurait pas une redirection ? Que donne le status de la réponse (response.getStatusLine().getStatusCode() ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    C'était une réponse de principe ! C'est bien l'entity de la réponse qu'il faut exploiter pour exploiter la réponse, forcément.

    Le html de l'entity de la réponse ne correspond pas à la page que tu attends ? Est-ce qu'il n'y aurait pas une redirection ? Que donne le status de la réponse (response.getStatusLine().getStatusCode() ?
    Ba oui c'est pour cela que j'ai essayé avec la réponse , je le connais moi le mot de passe

    Et non tant donnée qu'il me donne une page vide, alors que c'est sensé être plein de href dans tout les sens !

    Ca c'est après l'entrée du mot de passe (juste une partie de la page), juste avant il me met un petit message "Connexion réussi" 1 seconde.
    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
     
    <FORM ACTION="/cgi-bin/postpf/cgi-bin/dynamic/reports_and_information.html?sessionid=Iq3Oql3Bv_RfqEk_&sessionkey=JPe.rYHknhq8wP_4" METHOD="post">
    <TABLE border=0>
     
    <TR><TD><A HREF="/cgi-bin/dynamic/printer/config/reports/devicestatistics.html">Stat. périphérique</A></TD></TR>
     
    <TR><TD><A HREF="/cgi-bin/dynamic/printer/config/reports/MenusPage.html">Paramètres du périphérique</A></TD></TR>
     
    <TR><TD><A HREF="/cgi-bin/dynamic/printer/config/reports/deviceinfo.html">Infos périphériques</A></TD></TR>
     
    <TR><TD><A HREF="/cgi-bin/dynamic/printer/config/reports/printdirectory.html">Imprimer répertoire</A></TD></TR>
     
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/shortcutreport.html">Liste de raccourcis</a></td><td></td></tr>
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/printfaxjoblog.html">Journal travaux fax</a></td><td></td></tr>
     
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/printfaxcalllog.html">Journal des appels de télécopies</a></td><td></td></tr>
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/emaildest.html">Raccourcis des courriers électroniques</a></td><td></td></tr>
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/ftpdest.html">Raccourcis FTP</a></td><td></td></tr>
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/faxdest.html">Raccourcis des télécopies</a></td><td></td></tr>
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/copydest.html">Raccourcis des copies</a></td><td></td></tr>
     
    <tr><td><a HREF="/cgi-bin/dynamic/printer/config/reports/printprofile.html">Profiles List</a></td><td></td></tr>
    et sinon sur la connexion le formulaire donne ça:

    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
     
     
    <form id="login_form" action="/cgi-bin/posttest/printer/login.html" method="post">
    <input type="hidden" name="login_type" value="password_only">
    <input type="hidden" name="goto" value="/cgi-bin/dynamic/reports_and_information.html">
    <input type="hidden" name="accid" value="13">
    <table>
     
     
     
    <tr><td>Mot de passe</td><td><input type="password" name="password" id="password" size="22" maxlength="128"/></td></tr>
     
     
     
     
     
     
     
    </table>
     
    <HR SIZE=2 ALIGN=LEFT WIDTH="75%" NOSHADE>
    <table>
    <tr>
    <td><input type="submit" value="Soumettre"></td><td>&nbsp;&nbsp;</td>
    <td><input type="button" value="Annuler" onclick="history.go(-1);"></td>
    </tr>
    </table>
    <br/>
    <!--
    <p><img src="/cgi-bin/dynamic/printer/images/login.png" alt="SSL" style="border:0"><a href="https://***.***.***.***/cgi-bin/dynamic/printer/login.html?login_type=password_only&accid=13&goto=%2Fcgi%2Dbin%2Fdynamic%2Freports_and_information.html">Cliquer ici pour une connexion securisée</a></p>
    -->
    </form>

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par TheLLspectre Voir le message
    Et non tant donnée qu'il me donne une page vide, alors que c'est sensé être plein de href dans tout les sens !
    Et le status, donc ? Parce que si c'est une redirection, un 301, ou 302, 303, 304, 307, tu trouveras dans un header (Location) une url à relancer pour avoir ta page.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Et le status, donc ? Parce que si c'est une redirection, un 301, ou 302, 303, 304, 307, tu trouveras dans un header (Location) une url à relancer pour avoir ta page.
    ah oui zut, je l'ai oublié !
    C'est 200

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    200, hum, donc pas un code de redirection. Tu peux lister les headers dans la réponse ? Y'aurait-il un header refresh ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Dis moi si c'est bien ça qu'il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Header[] head = response.getAllHeaders();
    for(int i = 0; i < head.length; i++)
    {
        	System.out.println(head[i]);
    }
    en tout cas cela me donne:
    Connection: close

  12. #12
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, c'est une manière de faire.
    Citation Envoyé par TheLLspectre Voir le message
    Connection: close
    Tu n'as vraiment que ça comme headers ? En tout cas il semble que ton login soit refusé, je dirais. Tu peux montrer le code du POST, tu es sûr que tu passes bien l'ensemble des champs du formulaire, avec les bonnes informations ? En revanche, je ne sais comment le password est censé être transmis en form, s'il y a une transformation particulière. Il n'y a pas de JavaScript dans la page qui pourrait prendre la main sur le submit ?

    Je me demande si tu ne devrais pas envisager de passer par HtmlUnit pour ne plus avoir à résoudre à la main toutes ces problématiques.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #13
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Oui, c'est une manière de faire.

    Tu n'as vraiment que ça comme headers ? En tout cas il semble que ton login soit refusé, je dirais. Tu peux montrer le code du POST, tu es sûr que tu passes bien l'ensemble des champs du formulaire, avec les bonnes informations ? En revanche, je ne sais comment le password est censé être transmis en form, s'il y a une transformation particulière. Il n'y a pas de JavaScript dans la page qui pourrait prendre la main sur le submit ?

    Je me demande si tu ne devrais pas envisager de passer par HtmlUnit pour ne plus avoir à résoudre à la main toutes ces problématiques.
    Oui que ça comme header !
    Y a qu'un seul champ c'est le mot de passe:
    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
     
     
    <form id="login_form" action="/cgi-bin/posttest/printer/login.html" method="post">
    <input type="hidden" name="login_type" value="password_only">
    <input type="hidden" name="goto" value="/cgi-bin/dynamic/reports_and_information.html">
    <input type="hidden" name="accid" value="13">
    <table>
     
     
     
    <tr><td>Mot de passe</td><td><input type="password" name="password" id="password" size="22" maxlength="128"/></td></tr>
     
     
     
     
     
     
     
    </table>
     
    <HR SIZE=2 ALIGN=LEFT WIDTH="75%" NOSHADE>
    <table>
    <tr>
    <td><input type="submit" value="Soumettre"></td><td>&nbsp;&nbsp;</td>
    <td><input type="button" value="Annuler" onclick="history.go(-1);"></td>
    </tr>
    </table>
    <br/>
    <!--
    <p><img src="/cgi-bin/dynamic/printer/images/login.png" alt="SSL" style="border:0"><a href="https://***.***.***.***/cgi-bin/dynamic/printer/login.html?login_type=password_only&accid=13&goto=%2Fcgi%2Dbin%2Fdynamic%2Freports_and_information.html">Cliquer ici pour une connexion securisée</a></p>
    -->
    </form>
    En revanche il y a une grosse partie JavaScript oui !

    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
     
    <script type="text/javascript">
    <!--
    function cookiesEnabled()
    {
        var enabled = false;
     
        //if not (IE4+ or NS6+), then check different way:
        if (typeof window.navigator.cookieEnabled == "undefined")
        {
            document.cookie = "testcookie=val";
            enabled = (document.cookie.indexOf("testcookie=") != -1);
        }
        else
        {
            enabled = window.navigator.cookieEnabled;
        }
        return enabled;
    }
     
    function OnLoad()
    {
        var f = null;
        f = document.getElementById("login_form");
        if (f)
        {
            if (f.username)
            {
                f.username.focus();
            }
            else if (f.password)
            {
                f.password.focus();
            }
        }
        msg = document.getElementById("enable_cookie_msg");
        if (msg)
        {
            // check if cookies is disabled
            if (cookiesEnabled() == false)
            {
                msg.style.display = 'block';
                // document.getElementById("login_container").style.display = 'none';
            }
            else
            {
                msg.style.display = 'none';
            }
        }
    }
    function reload_left()
    {
        // set session cookies cookie
        document.cookie='session_id=; expires=Wednesday, 23-Jan-2030 00:00:01 GMT; path=/';
        document.cookie='session_key=; expires=Wednesday, 23-Jan-2030 00:00:01 GMT; path=/';
     
        // retrieve left frame using new frame name 'Directory'
        frame = top.Directory;
        // if the left frame is still using the old name, 'frame' will be null.
        if (frame == null)
        {
            // use old frame name 'left' instead.
            frame = top.left;
        }
        i = frame.document.getElementById('logout_div');
        i.className = 'visible';
    }
    Et niveau du mot de passe celui que je teste utilise des caractères alphabétiques normaux mais se termine par "!" ce qu'il fait qu'il me le retranscrit en %21, donc est ce que la ça ne gêne pas pour l'interprétation, est ce qu'il faudrait pas revoir l'encodage des paramètres du post !

  14. #14
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Je me demande si tu ne devrais pas envisager de passer par HtmlUnit pour ne plus avoir à résoudre à la main toutes ces problématiques.
    Effectivement, je découvre l'approche Web via Java, et en regardant la documentation de HtmlUnit, je me demande aussi si ça ne serait pas plus simple et plus rapide de passer par ça !

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Le JavaScript ne semble pas redéfinir le submit, donc ce n'est pas le soucis à priori.

    Citation Envoyé par TheLLspectre Voir le message
    Et niveau du mot de passe celui que je teste utilise des caractères alphabétiques normaux mais se termine par "!" ce qu'il fait qu'il me le retranscrit en %21, donc est ce que la ça ne gêne pas pour l'interprétation, est ce qu'il faudrait pas revoir l'encodage des paramètres du post !
    Normalement non, l'encodage c'est normal. En revanche, je ne comprends pas trop pourquoi ce serait encodé sous cette forme... tu ne passes pas les paramètres dans l'URL quand même ?

    Tu utilises bien quelque chose comme le code suivant pour passer tes paramètres ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     List<NameValuePair> postParameters = new ArrayList<>();
        postParameters.add(new BasicNameValuePair("param1", "param1_value"));
        postParameters.add(new BasicNameValuePair("param2", "param2_value"));
     
        httpPost.setEntity(new UrlEncodedFormEntity(postParameters, "UTF-8"));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    oui oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    				formparams.add(new BasicNameValuePair("login_form", str));
    ...
    httppost.setEntity(entity);
    J'ai mis toute cette partie de coté pour voir le HtmlUtil
    et j'obtiens cela:
    [WARN] com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl - Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://***.***.***.***/cgi-bin/dynamic/printer/include/jshelper.js', but got 'text/html'.

    et le retour de la page apres l'entrée du mot de passe:
    HtmlPage('http://***.***.***.***/cgi-bin/dynamic/printer/login.html?login_type=********&accid=13&goto=%2Fcgi%2Dbin%2Fdynamic%2Freports_and_information.html&cgiError=GENERIC)@556422229'
    sauf que là on peut voir une erreur certainement du au Javascript ?

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par TheLLspectre Voir le message
    oui oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    				formparams.add(new BasicNameValuePair("login_form", str));
    ...
    httppost.setEntity(entity);
    login_form, c'est l'identifiant de la form, pas d'un paramètre. Les identifiants de paramètres c'est les valeurs dans les attributs name des balises input ! Et il faut tous les passer.

    Citation Envoyé par TheLLspectre Voir le message
    J'ai mis toute cette partie de coté pour voir le HtmlUtil
    et j'obtiens cela:
    [WARN] com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl - Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://***.***.***.***/cgi-bin/dynamic/printer/include/jshelper.js', but got 'text/html'.
    hum, là, je ne vois pas trop ce que je peux y faire. Si tu charges directement l'url du js, dans ton navigateur, tu peux voir le content-type (par les outils d'inspection) : juste pour confirmer que c'est bien text/html, ce qui est assez étrange.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    login_form, c'est l'identifiant de la form, pas d'un paramètre. Les identifiants de paramètres c'est les valeurs dans les attributs name des balises input ! Et il faut tous les passer.
    donc faudrait que je place tout ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <input type="hidden" name="login_type" value="password_only">
    <input type="hidden" name="goto" value="/cgi-bin/dynamic/reports_and_information.html">
    <input type="hidden" name="accid" value="13">
    <td><input type="submit" value="Soumettre"></td><td>&nbsp;&nbsp;</td>
    <td><input type="button" value="Annuler" onclick="history.go(-1);"></td>
    EDIT:

    J'ai rajouter des paramètres mais pas les deux derniers pour le moment vu qu'ils n'ont pas de name je préfère attendre, mais ça me retourne cela maintenant:

    CODE 302
    Connection: close
    Location: /cgi-bin/dynamic/printer/login.html?login_type=********&accid=13&goto=%2Fcgi%2Dbin%2Fdynamic%2Freports_and_information.html&cgiError=GENERIC
    <html>
    <head></head>
    <body></body>
    </html>

    au final j'ai la meme erreur qu'avec HtmlUtil

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par TheLLspectre Voir le message
    donc faudrait que je place tout ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <input type="hidden" name="login_type" value="password_only">
    <input type="hidden" name="goto" value="/cgi-bin/dynamic/reports_and_information.html">
    <input type="hidden" name="accid" value="13">
    <td><input type="submit" value="Soumettre"></td><td>&nbsp;&nbsp;</td>
    <td><input type="button" value="Annuler" onclick="history.go(-1);"></td>
    ]J'ai rajouter des paramètres mais pas les deux derniers pour le moment vu qu'ils n'ont pas de name je préfère attendre
    Les deux derniers sont des boutons, dont le bouton de submit, donc pas des paramètres.

    Citation Envoyé par TheLLspectre Voir le message
    , mais ça me retourne cela maintenant:

    Code http : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CODE 302
    Connection: close
    Location: /cgi-bin/dynamic/printer/login.html?login_type=********&accid=13&goto=%2Fcgi%2Dbin%2Fdynamic%2Freports_and_information.html&cgiError=GENERIC
    <html>
     <head></head>
     <body></body>
    </html>
    Donc voilà quelque shose d'intéressant, avec une redirection en plus. Mais effectivement, une redirection vers une page d'erreur.

    Seulement, dans ce que tu m'affiches ci-avant, il manque un paramètre :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="password" name="password" id="password" size="22" maxlength="128"/>
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #20
    Membre à l'essai Avatar de TheLLspectre
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 43
    Points : 19
    Points
    19
    Par défaut
    Oooooh ! il était caché !!!
    C'est d'ailleurs celui la qui prend la chaîne de caractère non? (pour le moment je l'ai laissé sur login_type aussi (mais comme indiqué c'est le type du login))

    j'ai cela qui se rajoute:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CODE 302
    Connection: close
    Set-Cookie: session_id=6Qv3.aVouQrH.62J; path="/";
    Set-Cookie: session_key=a_u2rZvnlhOyt7io; path="/";
    Location: /cgi-bin/dynamic/printer/login_success.html?goto=%2Fcgi%2Dbin%2Fdynamic%2Freports_and_information.html%3Fsessionid%3D6Qv3.aVouQrH.62J%26sessionkey%3Da_u2rZvnlhOyt7io&sessionid=6Qv3.aVouQrH.62J&sessionkey=a_u2rZvnlhOyt7io
    <html>
     <head></head>
     <body></body>
    </html>
    d'où un succés a priori, il me faut maintenant me connecter sur cette nouvelle page !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. recupérer le code source d'une page web avec httpclient
    Par fraisa1985 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 01/07/2008, 10h40
  2. Lancement d'une page web avec un bouton
    Par Elandril dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 14/03/2006, 21h08
  3. Réponses: 2
    Dernier message: 19/12/2005, 13h15
  4. Ouvrir une page Web avec le navigateur
    Par BB85_TIGRIS dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 17/12/2005, 09h45
  5. Son dans une page Web avec Firefox
    Par diod dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 02/12/2005, 17h49

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