我正在尝试使用从服务器请求数据HttpsURLConnection;我目前有服务器要求用户通过提示输入用户名和密码。在 Web 浏览器中输入正确的用户名和密码后,浏览器会将用户名和密码保存为浏览器中的会话 cookie,以便您可以访问站点内的其他页面,而不会提示您输入凭据。但是对于Java客户端,不保存用户名和密码。我试图用来.disconnect()关闭连接,但我不断收到以下错误:java.lang.IllegalStateException: Already connectedat sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3053)at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:316)我的Java代码:private static void sendPost(String _url) throws Exception { String url = _url; URL obj = new URL(url); HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); con.setRequestMethod("POST"); int responseCode = con.getResponseCode(); Auth(con); if (responseCode == 200) { label.setText("Sucssesfully Scanned: " + StudID.getText()); } else { label.setText("Error, please scan again"); } con.disconnect();}private static ArrayList<String> Get(String _url) throws Exception { ArrayList<String> list = new ArrayList<>(); JsonParser parser = new JsonParser(); String url = _url; URL obj = new URL(url); HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); Auth(con); con.setRequestMethod("GET"); con.setRequestProperty("Accept", "application/json"); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); }用户名和密码提示示例:https : //chapel-logs.herokuapp.com/chapel
2 回答
largeQ
TA贡献2039条经验 获得超7个赞
java.lang.IllegalStateException: 已经连接
该异常意味着您在请求发送后尝试设置为请求提供授权的属性。
这可能是它发生的地方:
int responseCode = con.getResponseCode(); Auth(con);
并Auth
调用setRequestProperty
.
如果尚未发送,则询问响应代码会导致发送请求。(显然……在你得到响应之前你不能得到响应码,服务器不能给你一个,除非请求被发送。)
要回答您的问题,调用disconnect
连接将断开连接。
但这不是导致您出现问题的原因。堆栈跟踪清楚地表明当有东西调用时发生了异常setRequestProperty
。
杨__羊羊
TA贡献1943条经验 获得超7个赞
我确定了交换顺序:
int responseCode = con.getResponseCode();
Auth(con);
所以工作解决方案是:
Auth(con);
int responseCode = con.getResponseCode();
我假设ResponseCode()如果尚未发出请求,则向服务器创建一个请求,否则ResponseCode()使用预先存在的请求。经过进一步测试,我得出结论,无需调用.disconnect().
添加回答
举报
0/150
提交
取消