2011-01-13 14 views
3

Wie geben Sie eine Cookie-Richtlinie in htmlunit an, um alle Cookies zu akzeptieren?Cookie-Richtlinie in htmlunit

+0

@Mat Banik, ich Post einige Antwort, aber es ist nicht wirklich gut. –

+0

Ich habe festgestellt, dass, anstatt die Cookie-Richtlinie zu optimieren, es besser ist zu sehen, warum die Cookies abgelehnt werden - und zu beheben. – mauhiz

Antwort

3

neu erstellen Sie einfach die ganze Cookie Klasse: Hier Quelle der Klasse ist: http://jarvana.com/jarvana/view/net/sourceforge/htmlunit/htmlunit/2.8/htmlunit-2.8-sources.jar!/com/gargoylesoftware/htmlunit/CookieManager.java?format=ok

nun diese Methode Lookup public synchronized Set<Cookie> getCookies(final URL url) in die Sie dort finden Sie:

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); 
     } 
    } 

Fernbedienung, um die Spezifikationen Anpassung Erklärung if (spec.match(cookie, cookieOrigin)) Sie sollten Sie alle Cookies unabhängig von der Richtlinie akzeptieren. Und/oder Sie können das ACCEPT_ALL_COOKIES-Flag bearbeiten und die entsprechenden Spezifikationen erfüllen, wenn dies die in der Konfiguration angegebene Richtlinie ist.

+0

Sie haben Recht. Ich sollte mehr schlafen) –

2

Einige Lösungen mit Änderungen am Quellcode.

  1. Sie können einfach cookieSpec.validate(cookie, cookieOrigin); Linie von org.apache.http.client.protocol.ResponseProcessCookies in Httpclient

  2. In Htmlunit entfernen Sie Ihre eigene Strategie es statt

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

    Optional in com.gargoylesoftware.htmlunit.CookieManager erstellen und verwenden können, hängt es sollte von Konstruktor Parameter von CookieManager aber Autoren denken nicht so)

    /** 
        * 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. 
        */ 
    

    Wenn Sie also Ihre eigene Cookie-Strategie implementieren oder Fälle behandeln möchten, in denen CookiePolicy.BROWSER_COMPATIBILITY nicht browserfähig ist, sollten Sie den Code ändern.