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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top