当前位置: 首页 > 知识库问答 >
问题:

如何在java URLConnection中维护会话?

惠凯歌
2023-03-14

我正在尝试登录到一个网站,并获得一个页面站点的页面源后,我用java URLConnection登录到该网站。我面临的问题是我无法维护会话,所以服务器给我这个警告,不让我连接:

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

这是我的源代码:

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) {
    }

共有1个答案

万俟穆冉
2023-03-14

您应该使用一个HTTP库来处理会话管理和HTTP协议的其他细节,例如,支持Cookie和诸如Keep-Alive、代理等开箱即用的东西。尝试Apache HttpComponents

 类似资料:
  • 问题内容: 我试图用来刮擦需要通过登录的网站。然后,一旦我登录,便可以通过访问一个单独的网页。 第一个问题,现在被登录。我试图使用到的登录信息,但我得到的回应没有出现在被记录。 在这里,我只是转发我返回的页面,但是返回的页面仍显示登录表单,如果尝试访问另一个页面,则表示我尚未登录。 我认为我需要维护客户端会话和cookie数据,但是找不到任何资源可以帮助我了解如何做到这一点。 作为后续,我最终使用

  • 我正在寻找一个持久的会话管理器,将会话保存在文件系统(如PHP)上,可以与DropWizard一起使用。我看到有一个<code>环境。getSessionHandler(),但我没有看到关于它的文档。 我可以写我自己的,但我希望有一个煮熟的饭。上面的会话句柄是我要找的吗?如何使用它?

  • 问题内容: 我正在使用AngularJS框架进行项目。我对使用这个框架很陌生。过去,我只使用纯JavaScript和jQuery。该项目是针对利基市场的一种Web设计器应用程序。 当用户在设计时在页面之间移动时,我希望维护他们所做的所有更改的会话。 现在,如果用户登录,我们将使用数据库中的数据加载会话。当用户单击“保存”按钮时,我们将使用会话数据更新数据库。有人告诉我,我可以在Angular中保持

  • 如何在restasured中设置会话属性?在我的应用程序代码中,我们有如下内容 String userId = request.getSession().getAttribute(“userid”) 如何在此处将 userId 设置为会话属性(在重新保证的测试用例中)? 如何为所有请求(多个后续请求)维护同一会话? 当我发送多个请求时,它认为每个请求都是新的,会话从服务器端失效,我想在后续调用之间

  • 问题内容: 此方法不正确。我试图找出的是一种不知道将存在哪些cookie,能够处理cookie更改以及维护会话的方法。 我正在为我的简单机器论坛编写一个应用程序,当您单击某些自定义行为时,它会更改其cookie配置。 但是,如果该应用程序对我的网站运行良好,我将发布一个供其他论坛使用的版本。 我知道我朝着正确的方向前进,但是逻辑有点像在踢我的屁股。 任何建议将不胜感激。 问题答案: 这段代码很混乱

  • 问题内容: 如何在Java中创建唯一/不同对象(无重复)的列表? 现在,由于密钥已被覆盖,因此我正在使用它,因此最后我们可以获得唯一的密钥。但是我相信应该有一种更好的方法,因为这里浪费了价值部分。 问题答案: 您可以使用Set实现: 来自JAVADoc的一些信息: 一个不包含 重复元素的集合 。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)最多包含一个空元素。顾名思义,此接