Java: HttpURLConnection Problèmes avec IllegalStateArgument: Déjà connecté
-
27-10-2019 - |
Question
Cette question semble clairement ce qui se passe. J'ai déjà une connexion ouverte, le problème est que je ne sais pas pourquoi
En ce moment je teste juste mon http connexion et à l'extérieur.
Connexion:
HttpURLConnection con = openConnection(URLGenerator.getLoginURL(), true, true,"POST");
String content = ...;
writeToOutput(con, content);
con.connect();
String cookieVal = con.getHeaderField("Set-Cookie");
if(cookieVal != null)
{
sessionId = cookieVal.substring(0, cookieVal.indexOf(";"));
}
con.disconnect();
return con.getResponseCode();
Déconnexion:
HttpURLConnection con = openConnection(URLGenerator.getLogoutURL(), true, true,"GET");
String content = ...;
writeToOutput(con, content);
setCookies(con);
con.connect();
con.disconnect();
return con.getResponseCode();
et pour les amateurs de code la fonction OpenConnection (parce que je sais que la première chose que les gens vont se poser est: « Où est cette fonction »
public static final HttpURLConnection openConnection(URL url, boolean in, boolean out,String requestMethode) throws IOException{
HttpURLConnection con = (HttpURLConnection) url.openConnection ();
con.setDoInput(in);
con.setDoOutput (out);
if(requestMethode == null){
requestMethode = "GET";
}
con.setRequestMethod(requestMethode);
con.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded");
return con;
}
Ceci est la fonction qui déclenche la java.lang.IllegalStateException: Déjà connecté
public static final void setCookies(HttpURLConnection con){
if(sessionId != null)
{
con.setRequestProperty("Cookie", sessionId);
}
}
Ce que je ne comprends pas pourquoi la connexion est toujours ouverte.
J'ai même essayé de déconnexion d'appel, mais il ne fonctionne pas.
Je pensais que le principal était de mettre en place un objet HttpURLConncetion et ne se connectent pour exécuter la demande, recevoir le résultat et qui a mis fin à la connexion.
Toutes les idées?
Merci Jason
La solution
Vous devez les cookies set (demande de valeurs d'en-tête) avant vous écrivez au corps de la demande. Vous ne pouvez plus changer les en-têtes de demande lorsque le premier bit du corps de demande a été envoyé.
Alors, le changement
writeToOutput(con, content);
setCookies(con);
à
setCookies(con);
writeToOutput(con, content);
et ce problème devrait disparaître.