Jas*_*ers 9 java httpurlconnection illegalstateexception
这个问题似乎很明显发生了什么:我已经打开了连接,问题是我不知道为什么.
现在我只是测试我的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();
Run Code Online (Sandbox Code Playgroud)
登出:
HttpURLConnection con = openConnection(URLGenerator.getLogoutURL(), true, true,"GET");
String content = ...;
writeToOutput(con, content);
setCookies(con);
con.connect();
con.disconnect();
return con.getResponseCode();
Run Code Online (Sandbox Code Playgroud)
对于代码爱好者而言,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;
}
Run Code Online (Sandbox Code Playgroud)
这是触发java.lang.IllegalStateException的函数:已经连接
public static final void setCookies(HttpURLConnection con){
if(sessionId != null)
{
con.setRequestProperty("Cookie", sessionId);
}
}
Run Code Online (Sandbox Code Playgroud)
我没有得到的是为什么连接仍然是开放的.
我甚至试图断开连接,但它不起作用.
我认为校长是设置一个HttpURLConncetion对象并连接执行请求,接收结果并终止连接.
有任何想法吗?
谢谢杰森
在写入请求主体之前,需要设置cookie(请求标头值).当发送请求正文的第一位时,您不能再更改请求标头.
所以,改变
writeToOutput(con, content);
setCookies(con);
Run Code Online (Sandbox Code Playgroud)
至
setCookies(con);
writeToOutput(con, content);
Run Code Online (Sandbox Code Playgroud)
这个问题应该消失.