2011-01-13 134 views
3

如何在htmlunit中指定cookie政策以接受所有cookie?在htmlunit中的Cookie政策

+0

@Mat Banik,我发布了一些答案,但它不是很好。 – 2011-01-14 17:58:37

+0

我发现,而不是调整cookie政策,最好是看看为什么cookie被拒绝 - 并修复。 – mauhiz 2014-07-15 04:23:53

回答

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标志并通过规格匹配(如果这是配置中指定的策略)。

2

有些源代码修改的解决方案。

  1. 你可以简单地删除org.apache.http.client.protocol.ResponseProcessCookiescookieSpec.validate(cookie, cookieOrigin);线的HttpClient

  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不是浏览器功能的情况下,你应该修改代码。