如何关闭 HttpsURLConnection Java

我正在尝试使用从服务器请求数据HttpsURLConnection;我目前有服务器要求用户通过提示输入用户名和密码。在 Web 浏览器中输入正确的用户名和密码后,浏览器会将用户名和密码保存为浏览器中的会话 cookie,以便您可以访问站点内的其他页面,而不会提示您输入凭据。但是对于Java客户端,不保存用户名和密码。我试图用来.disconnect()关闭连接,但我不断收到以下错误:


java.lang.IllegalStateException: Already connected

at 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


千巷猫影
浏览 370回答 2
2回答

largeQ

java.lang.IllegalStateException: 已经连接该异常意味着您在请求发送后尝试设置为请求提供授权的属性。这可能是它发生的地方:&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;responseCode&nbsp;=&nbsp;con.getResponseCode(); &nbsp;&nbsp;&nbsp;&nbsp;Auth(con);并Auth调用setRequestProperty.如果尚未发送,则询问响应代码会导致发送请求。(显然……在你得到响应之前你不能得到响应码,服务器不能给你一个,除非请求被发送。)要回答您的问题,调用disconnect连接将断开连接。但这不是导致您出现问题的原因。堆栈跟踪清楚地表明当有东西调用时发生了异常setRequestProperty。

杨__羊羊

我确定了交换顺序:int responseCode = con.getResponseCode();Auth(con);所以工作解决方案是:Auth(con);int responseCode = con.getResponseCode();我假设ResponseCode()如果尚未发出请求,则向服务器创建一个请求,否则ResponseCode()使用预先存在的请求。经过进一步测试,我得出结论,无需调用.disconnect().
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java