为了账号安全,请及时绑定邮箱和手机立即绑定

如何关闭 HttpsURLConnection Java

如何关闭 HttpsURLConnection Java

千巷猫影 2021-11-03 14:17:32
我正在尝试使用从服务器请求数据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


查看完整回答
反对 回复 2021-11-03
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

我确定了交换顺序:


int responseCode = con.getResponseCode();

Auth(con);

所以工作解决方案是:


Auth(con);

int responseCode = con.getResponseCode();

我假设ResponseCode()如果尚未发出请求,则向服务器创建一个请求,否则ResponseCode()使用预先存在的请求。经过进一步测试,我得出结论,无需调用.disconnect().


查看完整回答
反对 回复 2021-11-03
  • 2 回答
  • 0 关注
  • 369 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信