htmlunit中的Cookie策略

时间:2011-01-13 15:30:20

标签: java cookies htmlunit

如何在htmlunit中指定cookie策略以接受所有cookie?

2 个答案:

答案 0 :(得分:3)

只需重新创建整个CookieManager类: 以下是该课程的来源:http://jarvana.com/jarvana/view/net/sourceforge/htmlunit/htmlunit/2.8/htmlunit-2.8-sources.jar!/com/gargoylesoftware/htmlunit/CookieManager.java?format=ok

现在查找此方法public synchronized Set<Cookie> getCookies(final URL url) 你在那里找到了这个:

   public static final String HTMLUNIT_COOKIE_POLICY = CookiePolicy.BROWSER_COMPATIBILITY; //default
   final CookieSpec spec = registry_.getCookieSpec(HTMLUNIT_COOKIE_POLICY);

   for (final org.apache.http.cookie.Cookie cookie : all) {
        if (spec.match(cookie, cookieOrigin)) {
            matches.add(cookie);
        }
    }

远程规范匹配语句if (spec.match(cookie, cookieOrigin))您应该接受所有cookie,无论政策如何。和/或您可以处理ACCEPT_ALL_COOKIES标志并通过匹配的规范,如果这是配置中指示的策略。

答案 1 :(得分:2)

一些包含源代码修改的解决方案。

  1. 您只需从httpClient中的cookieSpec.validate(cookie, cookieOrigin);删除org.apache.http.client.protocol.ResponseProcessCookies

  2. 在htmlUnit中,您可以创建自己的策略并在com.gargoylesoftware.htmlunit.CookieManager而不是

    中使用它
      public static final String HTMLUNIT_COOKIE_POLICY = CookiePolicy.BROWSER_COMPATIBILITY;
      ...
      final CookieSpec spec = registry_.getCookieSpec(HTMLUNIT_COOKIE_POLICY);
    

    可选择它应该取决于CookieManager的构造函数参数,但作者并不这么认为)

     /**
      * HtmlUnit's cookie policy is to be browser-compatible. Code which requires access to
      * HtmlUnit's cookie policy should use this constant, rather than making assumptions and using
      * one of the HttpClient {@link CookiePolicy} constants directly.
      */
    

    因此,如果您希望实施自己的Cookie策略或处理CookiePolicy.BROWSER_COMPATIBILITY不是浏览器功能的情况,则应修改代码。