Java;net.URLConnection

romainbisson Messages postés 88 Date d'inscription jeudi 25 octobre 2007 Statut Membre Dernière intervention 9 septembre 2014 - 13 avril 2011 à 10:47
seb576 Messages postés 43 Date d'inscription mercredi 17 novembre 2010 Statut Membre Dernière intervention 3 juin 2012 - 15 avril 2011 à 16:23
Bonjour,

J'aimerais me connecter en m'authenfifiant et en utilisant un cookie mais étant débutant je ne comprend pas mon erreur (voir la fin du sujet)


[code=java]import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyStore;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
import javax.net.ssl.SSLSocketFactory;


public class Requete {

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

String adresse2 = "https://localhost";


try{

InputStream in = new FileInputStream(new File("/home/romain/Desktop/myKeystore"));
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, "marseille".toCharArray());
in.close();

TrustManagerFactory tmf = 
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager= (X509TrustManager)tmf.getTrustManagers()[0];
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[] {defaultTrustManager}, null);
SSLSocketFactory sslSocketFactory = context.getSocketFactory();

//Création de la connexion
URL url = new URL(adresse2);
URLConnection connexion = url.openConnection();



((HttpsURLConnection) connexion).setSSLSocketFactory(sslSocketFactory);


((HttpsURLConnection) connexion).setRequestMethod("POST");

((HttpsURLConnection) connexion).setRequestProperty("login", "adminO");
((HttpsURLConnection) connexion).setRequestProperty("password", "admin");
((HttpsURLConnection) connexion).setRequestProperty("sel_domain_id", "1");



String cookie = "";

for(int i=0; ;i++){
String headerName = connexion.getHeaderFieldKey(i);
String headerValue = connexion.getHeaderField(i);

if(headerName null && headerValue null){
//No more headers
break;
}

if ("Set-Cookie".equalsIgnoreCase(headerName)){
//Parse cookie
String[] fields = headerValue.split(";\\s*");

String cookieValue = fields[0];
cookie += cookieValue;

String path = null;
String domain = "aliasource.local";

//Parse each field
for(int j=1 ; j<fields.length; j++){
if(fields[j].indexOf('=') > 0){
String[] f = fields[j].split("=");
if("path".equalsIgnoreCase(f[0])){
path = f[1];
cookie += "; path="+path;
}
if("domain".equalsIgnoreCase(f[0])){
domain = f[2];
System.out.println(domain);
}
cookie += "; domain="+domain;
System.out.println(cookie);
}
}}
((HttpsURLConnection) connexion).setRequestProperty("cookie", cookie);


connexion.connect();

connexion.setDoInput(true);

BufferedReader in1 = new BufferedReader(new InputStreamReader(connexion.getInputStream()));
String ligne1;
while((ligne1 = in1.readLine()) != null){
System.out.println("cool");
System.out.println(ligne1);
}

}



}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
//try{reader.close();}catch(Exception e){}
//try{writer.close();}catch(Exception e){}
}
}
}

[code=java]
/code/code

java.lang.IllegalStateException: Already connected
at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:2371)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:296)
at Requete.main(Requete.java:94)

1 réponse

seb576 Messages postés 43 Date d'inscription mercredi 17 novembre 2010 Statut Membre Dernière intervention 3 juin 2012 1
15 avril 2011 à 16:23
Bonjour,

à première vue, tu as une connexion déjà ouverte.
Si tu fais 2 traitements distincts, n'oublie pas de fermer la 1ère connexion
avant d'ouvrir la seconde et à la fin, ferme la 2ème connexion.

Regarde un peu plus en détail dans la Javadoc sur les méthodes suivantes : openConnection() et connect()


URL url = new URL(adresse2);
URLConnection connexion = url.openConnection();

Puis un peu plus loin

connexion.connect();


Regarde aussi si tu n'as pas une méthode close() dans la Javadoc. Et n'oublie pas de fermer ta connexion à la fin de tout traitement.

Tiens nous au courant.
Bonne journée.
0
Rejoignez-nous