Java: HttpurlConnection Problemas con ilegalstateargument: ya conectado
-
27-10-2019 - |
Pregunta
Esta pregunta parece claro qué está sucediendo: ya tengo una conexión abierta, el problema es que no sé por qué.
En este momento solo estoy probando mi inicio de sesión HTTP y fuera.
Acceso:
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();
Cerrar sesión:
HttpURLConnection con = openConnection(URLGenerator.getLogoutURL(), true, true,"GET");
String content = ...;
writeToOutput(con, content);
setCookies(con);
con.connect();
con.disconnect();
return con.getResponseCode();
Y para los amantes del código la función openConnection (porque sé que lo primero que la gente preguntará es "dónde está esta función"
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;
}
Esta es la función que desencadena el java.lang.illegalstateException: ya conectado
public static final void setCookies(HttpURLConnection con){
if(sessionId != null)
{
con.setRequestProperty("Cookie", sessionId);
}
}
Lo que no entiendo es por qué la conexión aún está abierta.
Incluso intenté llamar a la desconexión, pero no funciona.
Pensé que el director era configurar un objeto httpurlconncetion y conectarse para ejecutar la solicitud, recibir el resultado y eso terminó la conexión.
¿Algunas ideas?
Gracias Jason
Solución
Necesita configurar cookies (solicitar valores de encabezado) antes de Escribes al cuerpo de solicitud. Ya no puede cambiar los encabezados de solicitud cuando se envía el primer bit del cuerpo de solicitud.
Entonces, cambie
writeToOutput(con, content);
setCookies(con);
a
setCookies(con);
writeToOutput(con, content);
Y este problema debería desaparecer.