Index: java/org/apache/commons/httpclient/Header.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/Header.java,v retrieving revision 1.11 diff -u -r1.11 Header.java --- java/org/apache/commons/httpclient/Header.java 13 Jul 2003 13:54:50 -0000 1.11 +++ java/org/apache/commons/httpclient/Header.java 23 Oct 2003 21:32:51 -0000 @@ -68,6 +68,7 @@ * * @author Remy Maucherat * @author Mike Bowler + * @author Oleg Kalnichevski * @version $Revision: 1.11 $ $Date: 2003/07/13 13:54:50 $ */ public class Header extends NameValuePair { @@ -75,6 +76,11 @@ // ----------------------------------------------------------- Constructors /** + * Autogenerated header flag. + */ + private boolean isAutogenerated = false; + + /** * Default constructor. */ public Header() { @@ -91,6 +97,19 @@ super(name, value); } + /** + * Constructor with name and value + * + * @param name the header name + * @param value the header value + * @param isAutogenerated true if the header is autogenerated, + * false otherwise. + */ + public Header(String name, String value, boolean isAutogenerated) { + super(name, value); + this.isAutogenerated = isAutogenerated; + } + // --------------------------------------------------------- Public Methods /** @@ -140,6 +159,28 @@ */ public HeaderElement[] getElements() { return HeaderElement.parseElements(getValue()); + } + + /** + * Returns the value of the auto-generated header flag. + * + * @return true if the header is autogenerated, + * false otherwise. + */ + public boolean isAutogenerated() + { + return isAutogenerated; + } + + /** + * Sets the values of the auto-generated header flag. + * + * @return b true if the header is autogenerated, + * false otherwise. + */ + public void setAutogenerated(boolean b) + { + isAutogenerated = b; } } Index: java/org/apache/commons/httpclient/HeaderGroup.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HeaderGroup.java,v retrieving revision 1.4 diff -u -r1.4 HeaderGroup.java --- java/org/apache/commons/httpclient/HeaderGroup.java 12 Aug 2003 02:55:22 -0000 1.4 +++ java/org/apache/commons/httpclient/HeaderGroup.java 23 Oct 2003 21:32:53 -0000 @@ -250,4 +250,12 @@ return false; } + /** + * Returns an iterator over this group of headers. + * + * @return iterator over this group of headers. + */ + public Iterator getIterator() { + return this.headers.iterator(); + } } Index: java/org/apache/commons/httpclient/HttpMethodBase.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.186 diff -u -r1.186 HttpMethodBase.java --- java/org/apache/commons/httpclient/HttpMethodBase.java 22 Oct 2003 19:31:00 -0000 1.186 +++ java/org/apache/commons/httpclient/HttpMethodBase.java 23 Oct 2003 21:33:05 -0000 @@ -1,5 +1,5 @@ /* - * $Header: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v 1.186 2003/10/22 19:31:00 olegk Exp $ + * $Header: /home/cvs/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v 1.186 2003/10/22 19:31:00 olegk Exp $ * $Revision: 1.186 $ * $Date: 2003/10/22 19:31:00 $ * @@ -68,6 +68,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InterruptedIOException; +import java.util.Iterator; import org.apache.commons.httpclient.auth.AuthScheme; import org.apache.commons.httpclient.auth.HttpAuthenticator; @@ -1153,22 +1154,21 @@ LOG.trace("enter HttpMethodBase.addCookieRequestHeader(HttpState, " + "HttpConnection)"); - // Clean up the cookie headers - removeRequestHeader("cookie"); - CookieSpec matcher = CookiePolicy.getCookieSpec(this.params.getCookiePolicy()); Cookie[] cookies = matcher.match(conn.getHost(), conn.getPort(), getPath(), conn.isSecure(), state.getCookies()); if ((cookies != null) && (cookies.length > 0)) { if (getParams().isParameterTrue(HttpMethodParams.SINGLE_COOKIE_HEADER)) { // In strict mode put all cookies on the same header - getRequestHeaderGroup().addHeader( - matcher.formatCookieHeader(cookies)); + Header header = matcher.formatCookieHeader(cookies); + header.setAutogenerated(true); + getRequestHeaderGroup().addHeader(header); } else { // In non-strict mode put each cookie on a separate header for (int i = 0; i < cookies.length; i++) { - getRequestHeaderGroup().addHeader( - matcher.formatCookieHeader(cookies[i])); + Header header = matcher.formatCookieHeader(cookies[i]); + header.setAutogenerated(true); + getRequestHeaderGroup().addHeader(header); } } } @@ -2021,6 +2021,7 @@ throws IOException, HttpException { LOG.trace("enter HttpMethodBase.writeRequestHeaders(HttpState," + "HttpConnection)"); + clearAutogeneratedHeaders(); addRequestHeaders(state, conn); Header[] headers = getRequestHeaders(); @@ -2313,5 +2314,18 @@ this.responseHeaders = responseheaders; this.responseBody = null; this.responseStream = responseStream; + } + + /** + * Removes all auto-generated headers + */ + protected void clearAutogeneratedHeaders() { + Iterator items = getRequestHeaderGroup().getIterator(); + while (items.hasNext()) { + Header header = (Header)items.next(); + if (header.isAutogenerated()) { + items.remove(); + } + } } } Index: java/org/apache/commons/httpclient/auth/HttpAuthenticator.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/auth/HttpAuthenticator.java,v retrieving revision 1.12 diff -u -r1.12 HttpAuthenticator.java --- java/org/apache/commons/httpclient/auth/HttpAuthenticator.java 8 Aug 2003 07:58:33 -0000 1.12 +++ java/org/apache/commons/httpclient/auth/HttpAuthenticator.java 23 Oct 2003 21:33:08 -0000 @@ -208,7 +208,8 @@ String auth = BasicScheme.authenticate((UsernamePasswordCredentials) credentials); if (auth != null) { String s = proxy ? PROXY_AUTH_RESP : WWW_AUTH_RESP; - method.setRequestHeader(s, auth); + Header header = new Header(s, auth, true); + method.addRequestHeader(header); return true; } else { return false; @@ -330,7 +331,8 @@ String auth = authscheme.authenticate(credentials, method.getName(), method.getPath()); if (auth != null) { String s = proxy ? PROXY_AUTH_RESP : WWW_AUTH_RESP; - method.setRequestHeader(s, auth); + Header header = new Header(s, auth, true); + method.addRequestHeader(header); return true; } else { return false;