Index: org/apache/commons/httpclient/HttpMethodBase.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.211 diff -u -r1.211 HttpMethodBase.java --- org/apache/commons/httpclient/HttpMethodBase.java 19 Aug 2004 21:39:26 -0000 1.211 +++ org/apache/commons/httpclient/HttpMethodBase.java 14 Sep 2004 03:40:17 -0000 @@ -1141,7 +1141,7 @@ } } - CookieSpec matcher = CookiePolicy.getCookieSpec(this.params.getCookiePolicy()); + CookieSpec matcher = resolveCookieSpec(state, this.params); Cookie[] cookies = matcher.match(conn.getHost(), conn.getPort(), getPath(), conn.isSecure(), state.getCookies()); if ((cookies != null) && (cookies.length > 0)) { @@ -1435,7 +1435,7 @@ headers = getResponseHeaderGroup().getHeaders("set-cookie"); } - CookieSpec parser = CookiePolicy.getCookieSpec(this.params.getCookiePolicy()); + CookieSpec parser = resolveCookieSpec(state, this.params); for (int i = 0; i < headers.length; i++) { Header header = headers[i]; Cookie[] cookies = null; @@ -2099,6 +2099,38 @@ } return result; + } + + /** + * Resolves the cookie spec to use based upon the state of HttpState and + * HttpMethodParams. The HttpState value is only used when a param has not + * been set. + * @param state + * @param params + * @return The resolved cookie spec. + */ + private static CookieSpec resolveCookieSpec(HttpState state, HttpMethodParams params) { + + String cookieSpecName = CookiePolicy.DEFAULT; + if (params.isParameterSet(HttpMethodParams.COOKIE_POLICY)) { + // use the values set on the params + cookieSpecName = params.getCookiePolicy(); + } else { + // get the spec from the HttpState + switch (state.getCookiePolicy()) { + case CookiePolicy.COMPATIBILITY: + cookieSpecName = CookiePolicy.BROWSER_COMPATIBILITY; + break; + case CookiePolicy.NETSCAPE_DRAFT: + cookieSpecName = CookiePolicy.NETSCAPE; + break; + case CookiePolicy.RFC2109: + cookieSpecName = CookiePolicy.RFC_2109; + break; + } + } + + return CookiePolicy.getCookieSpec(cookieSpecName); } /** Index: org/apache/commons/httpclient/HttpState.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpState.java,v retrieving revision 1.35 diff -u -r1.35 HttpState.java --- org/apache/commons/httpclient/HttpState.java 23 Jun 2004 06:50:25 -0000 1.35 +++ org/apache/commons/httpclient/HttpState.java 14 Sep 2004 03:40:19 -0000 @@ -232,7 +232,6 @@ return removed; } - /** * Returns the current {@link CookiePolicy cookie policy} for this * HTTP state. @@ -245,9 +244,8 @@ */ public int getCookiePolicy() { - return CookiePolicy.getDefaultPolicy(); - } - + return this.cookiePolicy; + } /** * Defines whether preemptive authentication should be @@ -264,7 +262,6 @@ public void setAuthenticationPreemptive(boolean value) { this.preemptive = value; } - /** * Returns true if preemptive authentication should be Index: org/apache/commons/httpclient/params/DefaultHttpParamsFactory.java =================================================================== RCS file: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/params/DefaultHttpParamsFactory.java,v retrieving revision 1.11 diff -u -r1.11 DefaultHttpParamsFactory.java --- org/apache/commons/httpclient/params/DefaultHttpParamsFactory.java 5 Jul 2004 22:46:59 -0000 1.11 +++ org/apache/commons/httpclient/params/DefaultHttpParamsFactory.java 14 Sep 2004 03:40:19 -0000 @@ -72,7 +72,6 @@ params.setParameter(HttpMethodParams.USER_AGENT, "Jakarta Commons-HttpClient/3.0-alpha1"); params.setVersion(HttpVersion.HTTP_1_1); params.setConnectionManagerClass(SimpleHttpConnectionManager.class); - params.setCookiePolicy(CookiePolicy.RFC_2109); params.setHttpElementCharset("US-ASCII"); params.setContentCharset("ISO-8859-1"); params.setParameter(HttpMethodRetryHandler.HANDLER, new DefaultHttpMethodRetryHandler());