# Envoi de POST à CGI en java

**URL:** <https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 11:43 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915 "2016-02-21T11:43:49Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 11:43 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/1 "2016-02-21T11:43:49Z")

</div>

Bonjour,  
j’ouvre un nouveau fil car j’ai progressé ([https://www.debian-fr.org/utilisation-classe-authenticator-t37765.html](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
	    }
	  }
}

```

[/code]

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:43 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/2 "2016-02-21T11:43:50Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 11:43 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/3 "2016-02-21T11:43:52Z")

</div>

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 !

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 11:43 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/4 "2016-02-21T11:43:52Z")

</div>

> [@blaisoth](#):
>
> 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 😛)

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 11:48 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/5 "2016-02-21T11:48:01Z")

</div>

J’ai l’erreur `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(); 
    	      		      
      
      [/code]

```

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

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 11:48 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/6 "2016-02-21T11:48:02Z")

</div>

Je crois qu’il faut remplacer :

```auto

```

par

`String cookie = uc.getHeaderField(8);
uc.disconnect();
uc = (HttpsURLConnection) url.openConnection();`

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 11:48 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/7 "2016-02-21T11:48:02Z")

</div>

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é)

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 21, 2016, 11:48 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/8 "2016-02-21T11:48:04Z")

</div>

Je n’y connais pas bien plus que toi en fait, mais la doc devrait pouvoir t’en dire plus : [docs.oracle.com/javase/1.5.0/doc … alive.html](http://docs.oracle.com/javase/1.5.0/docs/guide/net/http-keepalive.html)

Et j’ai trouvé ça sur StackOverflow :  
[stackoverflow.com/questions/3460 … n-question](http://stackoverflow.com/questions/3460990/httpurlconnection-implementation-question)  
[stackoverflow.com/questions/4037 … ach-time-h](http://stackoverflow.com/questions/4037205/reusing-an-httpsurlconnection-dont-want-to-get-a-new-connection-each-time-h)

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 11:48 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/9 "2016-02-21T11:48:44Z")

</div>

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]

 bank 

identif

| Identifiant :  
 | Mot de passe :  
 |   
 |

 [/code]

Ai-je raison de les ignorer ?

---

<div class="post-metadata">

**Author:** ![blaisoth](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/b/90db22/32.png) [@blaisoth](https://www.debian-fr.org/u/blaisoth)\
**Post date:** [Février 21, 2016, 2:41 UTC](https://www.debian-fr.org/t/envoi-de-post-a-cgi-en-java/52915/10 "2016-02-21T14:41:59Z")

</div>

![:041](https://www.debian-fr.org/uploads/default/original/1X/bfe857c9119752799c3eac55ca37a50312c51282.gif "applaudit") presque un an plus tard, je fais enfin ce que je veux grâce à httpClient ([hc.apache.org/httpcomponents-client-ga/](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](https://www.debian-fr.org/uploads/default/original/1X/d95ba8413b5221afc0bc15b9965ffad445f89be8.gif "coeur")
