Domanda

Questa domanda sembra chiara cosa sta succedendo: ho già una connessione aperta, il problema è che non so perché.

In questo momento sto solo testando il mio login HTTP e fuori.

Login:

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();

Disconnettersi:

    HttpURLConnection con = openConnection(URLGenerator.getLogoutURL(), true, true,"GET");
    String content = ...;
    writeToOutput(con, content);
    setCookies(con);
    con.connect();
    con.disconnect();
    return con.getResponseCode();

E per gli amanti del codice la funzione OpenConnection (perché so che la prima cosa che le persone chiederanno è "dov'è questa funzione"

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;
    }

Questa è la funzione che innesca il java.lang.illegalstateException: già connesso

public static final void setCookies(HttpURLConnection con){
        if(sessionId != null)
        {
            con.setRequestProperty("Cookie", sessionId);
        }
    }

Quello che non capisco è il motivo per cui la connessione è ancora aperta.

Ho anche provato a chiamare disconnessione ma non funziona.

Pensavo che il preside fosse di impostare un oggetto HttpurlConncetion e connettermi per eseguire la richiesta, ricevere il risultato e che ha terminato la connessione.

Qualche idea?

Grazie Jason

È stato utile?

Soluzione

È necessario impostare i cookie (richiedere valori di intestazione) prima Scrivi al corpo della richiesta. Non è più possibile modificare le intestazioni di richiesta quando è stato inviato il primo bit del corpo di richiesta.

Quindi, cambia

writeToOutput(con, content);
setCookies(con);

a

setCookies(con);
writeToOutput(con, content);

E questo problema dovrebbe scomparire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top