Политика в отношении файлов cookie в htmlunit - PullRequest
3 голосов
/ 13 января 2011

Как указать политику использования файлов cookie в htmlunit для принятия всех файлов cookie?

Ответы [ 2 ]

3 голосов
/ 14 января 2011

Просто воссоздайте весь класс 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)) Вы должны принять все куки независимо от политики. И / или вы можете установить флаг ACCEPT_ALL_COOKIES и передать соответствие спецификации, если это политика, указанная в конфигурации.

2 голосов
/ 14 января 2011

Некоторые решения с модификациями исходного кода.

  1. Вы можете просто удалить cookieSpec.validate(cookie, cookieOrigin); строку из org.apache.http.client.protocol.ResponseProcessCookies в 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 не поддерживает браузер, вам следует изменить код.

...