質問

この質問は何が起こっているのかはっきりしているようです。私はすでに接続が開いています。問題は理由がわからないことです。

今、私は私の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);

そして、この問題は消えるはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top