9

这个问题似乎很清楚发生了什么:我已经打开了一个连接,问题是我不知道为什么。

现在我只是在测试我的 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();

对于代码爱好者来说,函数 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 对象并执行连接以执行请求,接收结果并终止连接。

有任何想法吗?

谢谢杰森

4

1 回答 1

7

您需要在写入请求正文之前设置 cookie(请求标头值)。发送请求正文的第一位后,您无法再更改请求标头。

所以,改变

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

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

这个问题应该会消失。

于 2011-03-20T12:57:33.137 回答