olegk 2003/02/16 09:56:17
Modified: httpclient/src/java/org/apache/commons/httpclient
HttpMethodBase.java
Log:
Changelog:
- fix for inconsistent cookie rejection in HttpMethodBase#ParseResponseHeaders method
Reported by by James Couball <[EMAIL PROTECTED]>
Contributed by James Couball
Reviewed by Oleg Kalnichevski
Revision Changes Path
1.113 +46 -36
jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java
Index: HttpMethodBase.java
===================================================================
RCS file:
/home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v
retrieving revision 1.112
retrieving revision 1.113
diff -u -r1.112 -r1.113
--- HttpMethodBase.java 16 Feb 2003 13:08:32 -0000 1.112
+++ HttpMethodBase.java 16 Feb 2003 17:56:17 -0000 1.113
@@ -73,6 +73,7 @@
import java.util.Set;
import java.util.StringTokenizer;
+import org.apache.commons.httpclient.cookie.MalformedCookieException;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.util.URIUtil;
@@ -1586,45 +1587,54 @@
LOG.trace("enter HttpMethodBase.processResponseHeaders(HttpState, "
+ "HttpConnection)");
- // add cookies, if any
- // should we set cookies?
- Header setCookieHeader = getResponseHeader("set-cookie2");
- if (null == setCookieHeader) { //ignore old-style if new is supported
- setCookieHeader = getResponseHeader("set-cookie");
+ Header[] headers = getResponseHeaderGroup().getHeaders("set-cookie2");
+ //Only process old style set-cookie headers if new style headres
+ //are not present
+ if (headers.length == 0) {
+ headers = getResponseHeaderGroup().getHeaders("set-cookie");
}
-
- if (setCookieHeader == null) {
- return;
- }
- try {
-
- CookieSpec parser =
CookiePolicy.getSpecByPolicy(state.getCookiePolicy());
- Cookie[] cookies = parser.parse(
- conn.getHost(),
- conn.getPort(),
- getPath(),
- conn.isSecure(),
- setCookieHeader);
- for (int i = 0; i < cookies.length; i++) {
- Cookie cookie = cookies[i];
- parser.validate(
+
+ CookieSpec parser = CookiePolicy.getSpecByPolicy(state.getCookiePolicy());
+ for (int i = 0; i < headers.length; i++) {
+ Header header = headers[i];
+ Cookie[] cookies = null;
+ try {
+ cookies = parser.parse(
conn.getHost(),
conn.getPort(),
getPath(),
conn.isSecure(),
- cookie);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Cookie accepted: \""
- + parser.formatCookie(cookie) + "\"");
+ header);
+ } catch (MalformedCookieException e) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Invalid cookie header: \""
+ + header.getValue()
+ + "\". " + e.getMessage());
}
- state.addCookie(cookie);
}
-
- } catch (HttpException e) {
- if (LOG.isWarnEnabled()) {
- LOG.warn("Cookie rejected: \""
- + setCookieHeader.getValue()
- + "\". " + e.getMessage());
+ if (cookies != null) {
+ for (int j = 0; j < cookies.length; j++) {
+ Cookie cookie = cookies[j];
+ try {
+ parser.validate(
+ conn.getHost(),
+ conn.getPort(),
+ getPath(),
+ conn.isSecure(),
+ cookie);
+ state.addCookie(cookie);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Cookie accepted: \""
+ + parser.formatCookie(cookie) + "\"");
+ }
+ } catch(MalformedCookieException e) {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Cookie rejected: \""
+ + parser.formatCookie(cookie) +
+ "\". " + e.getMessage());
+ }
+ }
+ }
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]