Java: httpurlconnection Проблемы с незаконным
-
27-10-2019 - |
Вопрос
Этот вопрос кажется ясным, что происходит: у меня уже открыто соединение, проблема в том, что я не знаю почему.
Прямо сейчас я просто проверяю свой http 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();
Выйти:
HttpURLConnection con = openConnection(URLGenerator.getLogoutURL(), true, true,"GET");
String content = ...;
writeToOutput(con, content);
setCookies(con);
con.connect();
con.disconnect();
return con.getResponseCode();
А для любителей кода функция OpenConnection (потому что я знаю, что первое, что люди спросят, - это «где эта функция»
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;
}
Это функция, которая запускает java.lang.illegalstateException: уже связан
public static final void setCookies(HttpURLConnection con){
if(sessionId != null)
{
con.setRequestProperty("Cookie", sessionId);
}
}
Чего я не понимаю, так это то, почему соединение все еще открыто.
Я даже пытался вызвать отключение, но это не работает.
Я думал, что принципал должен был настроить объект httpurlConncetion и подключиться к выполнению запроса, получить результат и завершить соединение.
Любые идеи?
Спасибо, Джейсон
Решение
Вам нужно установить файлы cookie (значения заголовка запроса) до Вы пишете в орган запроса. Вы не можете больше менять заголовки запроса, когда будет отправлен первый бит органа запроса.
Итак, изменить
writeToOutput(con, content);
setCookies(con);
к
setCookies(con);
writeToOutput(con, content);
И эта проблема должна исчезнуть.