Java: problemi HttpurlConnection con illegalstateArgument: già connesso
-
27-10-2019 - |
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
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.