Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 
Auteur Message
 Sujet du message: envoi de POST à CGI en java
MessagePosté: 14 Avr 2012 18:01 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 429
Localisation: Rethel
Bonjour,
j'ouvre un nouveau fil car j'ai progressé (https://www.debian-fr.org/utilisation-classe-authenticator-t37765.html Merci MisterFreez)

Je vois en me connectant sur ma banque que mon programme s'est connecté à l'heure où je l'ai lancé, mais le fichier que je reçois est toujours la page d'identification (comme si le mot de passe était erroné).
J'ai retardé le moment où je reçois les données (imaginant laisser du temps au CGI pour élaborer la page) mais ça ne change rien.

Merci de me donner le dernier petit coup de pouce qui va me permettre d'aboutir enfin !




Code:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.MalformedURLException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;


public class bank {

   
   public static void main(String[] args) throws IOException {
      
      URL url = new URL("https://www.creditmutuel.fr/cmne/fr/identification/default.cgi");
      HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
   
      
         
                   

          try {
           
         
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-type","application/x-www-form-urlencoded");
            con.setDoOutput(true);
            con.setDoInput(true);
            PrintWriter pout = new PrintWriter( new OutputStreamWriter(
             con.getOutputStream(), "utf-8"), true );
            pout.print("_cm_user=0290012345678&_cm_pwd=12345678");
            pout.flush();
                       
           
           
            File fichier = new File("/home/eric/Bureau/extrait") ;
            
           BufferedWriter ecr = new BufferedWriter (new FileWriter (fichier));
            
            BufferedReader lit =new BufferedReader(new InputStreamReader(
             con.getInputStream()));
         
           
               System.out.println ("début");
               if (! fichier.exists())   fichier.createNewFile();
            do{
                String ligne=lit.readLine();
                if(ligne==null)break;
                ecr.write(ligne);
            }while(true);
            System.out.println ("fin");
           
           
           
           
            lit.close(); ecr.close(); con.disconnect();pout.close();
           

           
           
          } catch (MalformedURLException e) {
            System.out.println(e);     // bad postURL
          } catch (IOException e2) {
            System.out.println(e2);    // I/O error
          }
        }
   }



_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
MessagePosté: 14 Avr 2012 18:27 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 4048
As-tu essayé de tracer une session normale avec un truc genre HttpFox (extension Iceweasel) pour voir ce qui se passe précisément ?

Sinon il y a un truc qui me frappe dans ton code : tu fais directement un POST sans récupérer de cookie session auparavant avec un GET. Perso quand je fais un système de login web je vérifie toujours que la session (donc le cookie) existe déjà au moment du POST (donc qu'il y a eu une page chargée auparavant) car sans cookie pas de session et sans session l'utilisateur serait obligé de retaper son login à chaque changement de page, il vaut mieux afficher un message propre "autorisez les cookies". C'est un comportement assez courant.

1) GET sur la page de login, récupérer le cookie session
2) POST sur la page de login en incluant le cookie session
3) éventuellement des séries de GET ou POST pour récupérer les infos que tu veux, toujours en incluant le cookie session
4) étant donné qu'il s'agit d'un site sensible, faire un dernier GET ou POST, toujours en incluant le cookie session, correspondant à la déconnexion afin que ce cookie ne puisse plus servir.

_________________
testing/unstable (amd64) sous KDE4
github/syam44 - De la bonne manière de poser les questions - Wiki debian-fr
Just because you're paranoid doesn't mean they aren't after you. -- J.Heller


Haut
 Profil  
 
MessagePosté: 14 Avr 2012 21:59 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 429
Localisation: Rethel
Effectivement, si je refuse les cookies sur epiphany, il retourne sur la page de connexion inlassablement.
Il me reste donc à savoir comment gérer un cookie session avec JAVA alors.
Merci pour cette nouvelle piste !

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
MessagePosté: 14 Avr 2012 22:16 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 4048
blaisoth a écrit:
Il me reste donc à savoir comment gérer un cookie session avec JAVA alors.

Ça je pourrai pas t'aider, Java et moi ça fait trois... (si ça faisait que deux ça irait encore :P)

_________________
testing/unstable (amd64) sous KDE4
github/syam44 - De la bonne manière de poser les questions - Wiki debian-fr
Just because you're paranoid doesn't mean they aren't after you. -- J.Heller


Haut
 Profil  
 
MessagePosté: 24 Avr 2012 16:07 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 429
Localisation: Rethel
J'ai l'erreur
Code:
nid=xxxxxxxxxxxxxxx80c331a6xxxxxxxxxxxxxx
Exception in thread "main" java.lang.IllegalStateException: Already connected
   at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:2284)
   at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:316)
   at cook.main(cook.java:32)

avec le code suivant:

Code:
public static void main(String args[]) throws IOException{

      URL url = new URL("https://www.creditmutuel.fr/cmne/fr/identification/default.cgi");
      HttpsURLConnection uc = (HttpsURLConnection) url.openConnection();
      
       try {
          String cookie = uc.getHeaderField(8);
         cookie = cookie.substring(0, cookie.indexOf(";"));
         System.out.println(cookie);
          uc.setRequestProperty("Content-type","application/x-www-form-urlencoded");
          uc.addRequestProperty("Cookie", cookie);
          uc.setDoOutput(true);
          uc.setDoInput(true);
          PrintWriter pout = new PrintWriter( new OutputStreamWriter(
             uc.getOutputStream(), "iso-8859-1"), true );
          pout.print("_cm_user=0290012345678&_cm_pwd=87654321");
          pout.flush();
                           
        
        


L'erreur ligne 32 (uc.setRequestProperty("Content-type","application/x-www-form-urlencoded");) disparaît si j'enlève le uc.getHeaderField 3 lignes plus haut.

Merci pour votre aide

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
MessagePosté: 24 Avr 2012 16:28 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 7737
Localisation: Grenoble
Je crois qu'il faut remplacer :
Code:
String cookie = uc.getHeaderField(8);

par
Code:
String cookie = uc.getHeaderField(8);
uc.disconnect();
uc = (HttpsURLConnection) url.openConnection();

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 24 Avr 2012 16:39 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 429
Localisation: Rethel
Je n'ai plus l'erreur mais je ne comprends pas bien le mécanisme :

1) Créer la connexion uc donne accès à une page contenant un cookie que j'enregistre
2) Se déconnecter puis se reconnecter (quel intérêt ?) produit un nouveau cookie et le précédent est obsolète

Non ? (je nébule)

D'autre part, je n'ai toujours pas ma connexion à SITFIN (loggé)

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
MessagePosté: 24 Avr 2012 17:07 
Hors ligne
Contributeur
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 7737
Localisation: Grenoble
Je n'y connais pas bien plus que toi en fait, mais la doc devrait pouvoir t'en dire plus : http://docs.oracle.com/javase/1.5.0/doc ... alive.html

Et j'ai trouvé ça sur StackOverflow :
http://stackoverflow.com/questions/3460 ... n-question
http://stackoverflow.com/questions/4037 ... ach-time-h

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 25 Avr 2012 14:15 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 429
Localisation: Rethel
question subsidiaire : les champs cachés
il y en a trois :
_cm_app=SITFIN
_cm_idtype=\quoi mettre ?\
_cm_langue=fr

Je ne les mettais pas dans le POST car ça marchait sans dans le petit code HTML suivant :
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
     "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
   <HEAD>
      <TITLE>bank</TITLE>
   </HEAD>
   <BODY>
      <P>identif
     <FORM method="POST" action="https://www.creditmutuel.fr/cmne/fr/identification/default.cgi" >



<TABLE summary="">
<TR>
<TD>
Identifiant :</label><BR /><INPUT type="text" name="_cm_user" value="0290012345678" class="e_texte" /></td>
<TD><LABEL for="password">Mot de passe :</label><BR /><INPUT type="password" name="_cm_pwd" value="87654321" class="e_texte" /></td>
<TD><BR /><INPUT type="image" src="/home/eric/04a461663941f752c49067ba81f8d0fb.png" class="e_image" /></td>
</tr>


</table>

</form>
   </BODY>
</HTML>


Ai-je raison de les ignorer ?

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
MessagePosté: 17 Avr 2013 23:36 
Hors ligne
Très bavard(e)!

Inscription: 05 Mai 2009 22:47
Messages: 429
Localisation: Rethel
:041 presque un an plus tard, je fais enfin ce que je veux grâce à httpClient (http://hc.apache.org/httpcomponents-client-ga/)
ou plus exactement client-dev/

C'est une merveille de simplicité. Je posterai mon code dès qu'il sera présentable.
Merci encore à tous ceux qui donnent de leur temps sur ce site :049

_________________
2.6.32-5-amd64 Gnome 2.30.2 asus K50IJ SX264V


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 10 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.076s | 12 Queries | GZIP : Off ]