Hello, Here are the patches that allow one to set default request headers from HttpClient.
Otis
Index: HttpClient.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpClient.java,v retrieving revision 1.42 diff -u -r1.42 HttpClient.java --- HttpClient.java 5 Jan 2002 11:15:59 -0000 1.42 +++ HttpClient.java 17 Jan 2002 20:07:03 -0000 @@ -254,6 +254,7 @@ if(!connection.isOpen()) { connection.open(); } + method.setDefaultRequestHeaders(method.getDefaultRequestHeaders()); return method.execute(getState(),connection); }
Index: HttpMethod.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethod.java,v retrieving revision 1.10 diff -u -r1.10 HttpMethod.java --- HttpMethod.java 5 Jan 2002 11:16:00 -0000 1.10 +++ HttpMethod.java 17 Jan 2002 20:07:22 -0000 @@ -100,6 +100,38 @@ public String getPath(); /** + * Sets the specified request header as default, overwriting any + * previous value. Specifying an empty or <code>null</code> value + * for the headerValue parameter will remove the specified header. + * Note that header-name matching is case-insensitive. + * @param headerName the header's name + * @param headerValue the header's value + */ + public void setDefaultRequestHeader(String headerName, String headerValue); + + /** + * Sets the default request headers. Any previously set default request + * headers will be overwritten. + * @param requestHeaders the new default request headers + */ + public void setDefaultRequestHeaders(Header[] headers); + + /** + * Adds the specified request header, NOT overwriting any + * previous value. + * Note that header-name matching is case insensitive. + * @param headerName the header's name + * @param headerValue the header's value + */ + public void addDefaultRequestHeader(String headerName, String headerValue); + + /** + * Returns default request headers. + * @return a <code>HashMap</code> of default request headers + */ + public Header[] getDefaultRequestHeaders(); + + /** * Set the specified request header, overwriting any * previous value. * Note that header-name matching is case insensitive. @@ -150,6 +182,11 @@ public void removeRequestHeader(String headerName); /** + * Return an array of my request headers. + */ + public Header[] getRequestHeaders(); + + /** * Whether or not I should automatically follow * HTTP redirects (status code 302, etc.) * @return <tt>true</tt> if I will automatically follow HTTP redirects @@ -180,11 +217,6 @@ * @return my query string */ public String getQueryString(); - - /** - * Return an array of my request headers. - */ - public Header[] getRequestHeaders(); // ---------------------------------------------------------------- Queries
Index: HttpMethodBase.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.24 diff -u -r1.24 HttpMethodBase.java --- HttpMethodBase.java 15 Jan 2002 20:53:47 -0000 1.24 +++ HttpMethodBase.java 17 Jan 2002 20:07:39 -0000 @@ -156,6 +156,74 @@ } /** + * Sets the specified request header as default, overwriting any + * previous value. Specifying an empty or <code>null</code> value + * for the headerValue parameter will remove the specified header. + * Note that header-name matching is case-insensitive. + * @param headerName the header's name + * @param headerValue the header's value + */ + public void setDefaultRequestHeader(String headerName, String headerValue) { + if(null == headerValue || headerValue.equals("")) { + defaultRequestHeaders.remove(headerName.toLowerCase()); + } + else { + Header header = new Header(headerName, headerValue); + defaultRequestHeaders.put(headerName.toLowerCase(), header); + } + } + + /** + * Sets the default request headers. Any previously set default request + * headers will be overwritten. + * @param requestHeaders the new default request headers + */ + public void setDefaultRequestHeaders(Header[] headers) { + if((null == headers) || (headers.length < 1)) + defaultRequestHeaders = new HashMap(); + else { + int len = headers.length; + for (int i=0; i<len; i++) { + Header header = headers[i]; + defaultRequestHeaders.put(header.getName().toLowerCase(), header); + } + } + } + + /** + * Adds the specified request header, NOT overwriting any + * previous value. + * Note that header-name matching is case insensitive. + * @param headerName the header's name + * @param headerValue the header's value + */ + public void addDefaultRequestHeader(String headerName, String headerValue) { + // "It must be possible to combine the multiple header fields into + // one "field-name: field-value" pair, without changing the + // semantics of the message, by appending each subsequent field-value + // to the first, each separated by a comma." + // - HTTP/1.0 (4.3) + headerName = headerName.toLowerCase(); + Header header = (Header)(defaultRequestHeaders.get(headerName)); + if(null == header) { + header = new Header(headerName, headerValue); + } else { + header.setValue( (null == header.getValue() ? "" : header.getValue()) + + ", " + + (null == headerValue ? "" : headerValue)); + } + defaultRequestHeaders.put(headerName, header); + } + + /** + * Returns default request headers. + * @return an array of default request headers + */ + public Header[] getDefaultRequestHeaders() { + return (Header[])(defaultRequestHeaders.values().toArray(new +Header[defaultRequestHeaders.size()])); + } + + /** * Set the specified request header, overwriting any * previous value. * Note that header-name matching is case-insensitive. @@ -245,6 +313,13 @@ } /** + * Return an array of my request headers. + */ + public Header[] getRequestHeaders() { + return (Header[])(requestHeaders.values().toArray(new +Header[requestHeaders.size()])); + } + + /** * Whether or not I should automatically follow * HTTP redirects (status code 302, etc.) * @return <tt>true</tt> if I will automatically follow HTTP redirects @@ -301,13 +376,6 @@ return queryString; } - /** - * Return an array of my request headers. - */ - public Header[] getRequestHeaders() { - return (Header[])(requestHeaders.values().toArray(new Header[requestHeaders.size()])); - } - // ---------------------------------------------------------------- Queries /** @@ -669,6 +737,14 @@ while(it.hasNext()) { conn.print(((Header)it.next()).toExternalForm()); } + it = defaultRequestHeaders.keySet().iterator(); + while(it.hasNext()) { + String headerName = (String)it.next(); + if(!requestHeaders.containsKey(headerName)) + { + +conn.print(((Header)defaultRequestHeaders.get(headerName)).toExternalForm()); + } + } } /** @@ -705,7 +781,8 @@ * already exists. */ protected void addUserAgentRequestHeader(HttpState state, HttpConnection conn) throws IOException, HttpException { - if (!requestHeaders.containsKey("user-agent")) { + if (!requestHeaders.containsKey("user-agent") && + !defaultRequestHeaders.containsKey("user-agent")) { setRequestHeader(HttpMethodBase.USER_AGENT); } } @@ -717,7 +794,8 @@ */ protected void addHostRequestHeader(HttpState state, HttpConnection conn) throws IOException, HttpException { // add host (should do this conditionally?, i.e., don't send to http/1.0?) - if (!requestHeaders.containsKey("host")) { + if (!requestHeaders.containsKey("host") && + !defaultRequestHeaders.containsKey("host")) { setRequestHeader("Host",conn.getHost()); } } @@ -728,7 +806,8 @@ * already exists. */ protected void addCookieRequestHeader(HttpState state, HttpConnection conn) throws IOException, HttpException { - if (!requestHeaders.containsKey("cookie")) { + if (!requestHeaders.containsKey("cookie") && + !defaultRequestHeaders.containsKey("cookie")) { Header cookieHeader = Cookie.createCookieHeader(conn.getHost(), conn.getPort(), getPath(), conn.isSecure(), new Date(), state.getCookies()); if(null != cookieHeader) { setRequestHeader(cookieHeader); @@ -743,7 +822,8 @@ */ protected void addAuthorizationRequestHeader(HttpState state, HttpConnection conn) throws IOException, HttpException { // add authorization header, if needed - if(!requestHeaders.containsKey("authorization")) { + if (!requestHeaders.containsKey("authorization") && + !defaultRequestHeaders.containsKey("authorization")) { Header wwwAuthenticateHeader = (Header)(responseHeaders.get("www-authenticate")); if(null != wwwAuthenticateHeader) { try { @@ -764,7 +844,8 @@ protected void addContentLengthRequestHeader(HttpState state, HttpConnection conn) throws IOException, HttpException { // add content length or chunking int len = getRequestContentLength(); - if(!requestHeaders.containsKey("content-length")) { + if (!requestHeaders.containsKey("content-length") && + !defaultRequestHeaders.containsKey("content-length")) { if(-1 < len) { setRequestHeader("Content-Length",String.valueOf(len)); } else if(http11 && (len < 0)) { @@ -1122,7 +1203,7 @@ path = null; followRedirects = false; queryString = null; - requestHeaders.clear(); + requestHeaders = defaultRequestHeaders; responseHeaders.clear(); statusCode = -1; statusText = null; @@ -1218,6 +1299,8 @@ private boolean followRedirects = false; /** My query string, if any. */ private String queryString = null; + /** Default request headers, if any. */ + private HashMap defaultRequestHeaders = new HashMap(); /** My request headers, if any. */ private HashMap requestHeaders = new HashMap(); /** My response headers, if any. */
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>