【问题标题】:Cookies turned off with Java URLConnection使用 Java URLConnection 关闭 Cookie
【发布时间】:2010-11-30 03:54:33
【问题描述】:

我正在尝试向需要 cookie 的网页发出请求。我正在使用 HTTPUrlConnection,但响应总是回来说

<div class="body"><p>Your browser's cookie functionality is turned off. Please turn it on.

如何发出请求,使被查询的服务器认为我打开了 cookie。我的代码是这样的。

private String readPage(String page) throws MalformedURLException {
    try {
        URL url = new URL(page);
        HttpURLConnection uc = (HttpURLConnection) url.openConnection();
        uc.connect();

        InputStream in = uc.getInputStream();
        int v;
        while( (v = in.read()) != -1){
            sb.append((char)v);
        }
        in.close();
        uc.disconnect();
    } catch (IOException e){
        e.printStackTrace();
    }
    return sb.toString();
}

【问题讨论】:

    标签: java http-headers


    【解决方案1】:

    您需要在系统中添加一个 CookieHandler 来处理 cookie。在 Java 6 之前,JRE 中没有 CookieHandler 实现,您必须自己编写。如果您使用的是 Java 6,则可以这样做,

      CookieHandler.setDefault(new CookieManager());
    

    URLConnection 的 cookie 处理真的很弱。它几乎不起作用。它不能正确处理所有 cookie 规则。如果您正在处理身份验证等敏感 cookie,则应使用 Apache HttpClient。

    【讨论】:

    • 现在我需要弄清楚如何进行 http 代理身份验证。我让它与 URLConnection 一起工作,但现在我需要在这里弄清楚。 tsok,谷歌会为我找到一些东西;)谢谢!
    【解决方案2】:

    我认为服务器无法在第一次请求时确定客户端不支持 cookie。因此,服务器可能会发送重定向。尝试禁用重定向:

    uc.setInstanceFollowRedirects(false);
    

    然后您将能够从响应中获取 cookie 并在下一个请求中使用它们(如果需要)。

    【讨论】:

      【解决方案3】:
      uc.getHeaderFields()
      // get cookie (set-cookie) here
      
      URLConnection conn = url.openConnection();
      conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2");
      conn.addRequestProperty("Referer", "http://xxxx");
      conn.addRequestProperty("Cookie", "...");
      

      【讨论】:

      • 终于有人在这个论坛说把代码放在哪里...谢谢兄弟,你救了我!
      【解决方案4】:

      如果您在登录后尝试抓取大量数据,您甚至可以使用 WebHarvest (http://web-harvest.sourceforge.net/) 之类的脚本化网络抓取工具获得更好的效果。我在自己的一些项目中使用它取得了巨大成功.

      【讨论】:

        猜你喜欢
        • 2016-06-20
        • 2015-06-22
        • 1970-01-01
        • 2021-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 2017-12-16
        相关资源
        最近更新 更多