如何在java URL连接中维护会话?

如何在java URL连接中维护会话?,java,request,urlconnection,Java,Request,Urlconnection,我正在尝试登录到一个网站,并在使用JavaURLConnection登录到该网站后获取该网站的页面源。我面临的问题是无法维护会话,因此服务器向我发出警告,不允许我连接: 此系统需要使用HTTP cookies来验证授权信息。 我们的系统检测到您的浏览器已禁用HTTP Cookie或不支持它们。 有关如何正确配置浏览器以用于此系统的详细信息,请参阅浏览器中的“帮助”页 起初,我试图发送空cookie,让服务器了解我正在处理会话,但它也没有给我会话id 这是我的源代码: try {

我正在尝试登录到一个网站,并在使用JavaURLConnection登录到该网站后获取该网站的页面源。我面临的问题是无法维护会话,因此服务器向我发出警告,不允许我连接:

此系统需要使用HTTP cookies来验证授权信息。 我们的系统检测到您的浏览器已禁用HTTP Cookie或不支持它们。 有关如何正确配置浏览器以用于此系统的详细信息,请参阅浏览器中的“帮助”页

起初,我试图发送空cookie,让服务器了解我正在处理会话,但它也没有给我会话id

这是我的源代码:

try {
        // Construct data
        String data = URLEncoder.encode("usr", "UTF-8") + "=" + URLEncoder.encode("usr", "UTF-8");
        data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode("pass", "UTF-8");

        // Send data
        URL url = new URL("https://loginsite.com");
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        conn.setRequestProperty("Cookie", "SESSID=");
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();

        // Get the response
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            System.out.println(line);
        }
        wr.close();
        rd.close();

        String headerName=null;
        for (int i=1; (headerName = conn.getHeaderFieldKey(i))!=null; i++) {
            if (headerName.equals("Set-Cookie")) {
                String cookie = conn.getHeaderField(i);
                System.out.println(cookie.split(";", 2)[0]);
            }
        }
        } catch (Exception e) {
    }

您应该使用一个HTTP库,该库为您处理会话管理和HTTP协议的其他详细信息,例如,支持cookie和诸如保持活动、代理等开箱即用的东西。尝试

进一步研究后,android似乎实际上建议使用HttpUrlConnection,而不是HttpClient。