【问题标题】:Java http cookieJava http cookie
【发布时间】:2011-11-18 19:20:58
【问题描述】:

如何从 java 中的 URL 获取 cookie 内容?

例如:当我访问 google.com 时使用 LiveHttpHeaders,我可以看到返回的 cookie 如下。

Cookie:SID=DQAAAKEAAADA1VJiGC-O-Ml8cPfRIA8NxJ3rCQfXbRnh5NMw-l8eunfAKJNypj9Rss1_Ok2yyQXCU9qu4jM2TuASy2EE0KUknUOsdOgMz3W7WCDgey6OSZ-xi_ozh_lZP8paJ_OViG_G2FaTWciTyd4Mp_V0LYjgov1u6KkhATu8day8-nEckMXb4I56cse8SaiYFCjDmpUDmL6CDFij8Nxd3XDUEOTn5SCifKrRDohW6mAAaqzFPA; HSID=AvoV_TPUEmoSB6KMm; PREF=ID=260f8c0212fee1a7:U=6ca9509bc747fb21:TM=1297164689:LM=1297164690:S=opeCe3s85Xhm3Bq1; NID=43=EZNhkfgLmXVNQriZ2rjU0HGj6flDYy2nfsPD4Ef6pME0wvXxc5_avP1R9fSea0py_-F9xY3SJ6DpMvLXRT_bU7FH97s8sOmx7l49cwvNUbYTwJcY0xqs-0vKqybTeNZY

如何获得 SID 的值? UrlConnection 类的getHeaderFieldKey() 中没有这些东西。我试图获取默认的cookieHandler,但系统返回null。

【问题讨论】:

    标签: java http cookies


    【解决方案1】:

    首先您需要设置 cookie 处理程序之前您连接到 url(例如CookieHandler.setDefault(new CookieManager()))。然后cookies将被自动收集,如有必要,您可以从CookieHandler中检索它们。

    【讨论】:

      【解决方案2】:
      URL myUrl = new URL("http://www.hccp.org/cookieTest.jsp");
      URLConnection urlConn = myUrl.openConnection();
      urlConn.connect();
      

      由于服务器可能在单个请求中设置多个 cookie,因此我们需要遍历响应标头,查找所有名为“Set-Cookie”的标头。

      String headerName=null;
      for (int i=1; (headerName = uc.getHeaderFieldKey(i))!=null; i++) {
          if (headerName.equals("Set-Cookie")) {                  
          String cookie = urlConn.getHeaderField(i);               
          ...         
      

      从 cookie 字符串中提取 cookie 名称和值:

      getHeaderField(int index) 方法返回的字符串是由semi-colons (;) 分隔的一系列name=value。第一个名称/值配对是您感兴趣的实际数据字符串(即"sessionId=0949eeee22222rtg" or "userId=igbrown"),随后的名称/值配对是元信息,可用于管理 cookie 的存储(何时到期等)。

       cookie = cookie.substring(0, cookie.indexOf(";"));
          String cookieName = cookie.substring(0, cookie.indexOf("="));
          String cookieValue = cookie.substring(cookie.indexOf("=") + 1, cookie.length());
      

      【讨论】:

        【解决方案3】:

        使用request.getCookies(),其中请求的类型为HttpServletRequest。请求被传递给方法 doGet 和/或 doPost,如果您使用 JSP,您应该在 servlet 或 JSP 主体中实现这些方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-01
          • 2014-01-04
          • 2010-11-26
          • 1970-01-01
          • 1970-01-01
          • 2016-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多