Java:httpurlconnectionの違法な問題の問題:既に接続されています
-
27-10-2019 - |
質問
この質問は何が起こっているのかはっきりしているようです。私はすでに接続が開いています。問題は理由がわからないことです。
今、私は私のHTTPログインとアウトをテストしているだけです。
ログイン:
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();
そして、コード愛好家の場合、関数のオペンコネクション(人々が最初に尋ねることは「この関数はどこにあるのか」ということを知っているからです
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オブジェクトをセットアップし、リクエストを実行し、結果を受信し、接続を終了するために接続することだと思いました。
何か案は?
ジェイソンに感謝します
解決
クッキーを設定する必要があります(ヘッダー値を要求) 前 リクエストボディに書き込みます。リクエスト本文の最初のビットが送信されたときに、リクエストヘッダーを変更することはできません。
だから、変更してください
writeToOutput(con, content);
setCookies(con);
に
setCookies(con);
writeToOutput(con, content);
そして、この問題は消えるはずです。
所属していません StackOverflow