Hello,

The attached patch adds the possibility to specify the port number for virtual 
hosts.

HttpClient currently uses the port number of the connection in the Host request 
header if the port number is different from the default port number for the 
protocol. Currently it isn't possible to specify a port number different from 
the port number of the connection. This patch adds this functionality.

According to the HTTP/1.1 specification, the port number specified in the Host 
request header doesn't need to be the same as the port number of the 
connection. Some web servers, e.g. Apache, ignore a different port number, but 
e.g. the application server WebSphere allows the port number of the connection 
and the port number in the Host header to be different.

This patch allows users of HttpClient to use a different port number for the 
Host request header if the webserver they connect to supports this.

Here's a code snippet that uses the patched code:

HttpClient httpClient = new HttpClient();
HttpMethod method = new GetMethod();
HostConfiguration hostConfiguration = new HostConfiguration();
hostConfiguration.setHost("localhost", 80, "http");
HostParams params = new HostParams();
params.setVirtualHost("localhost");
params.setVirtualHostPort(100);
hostConfiguration.setParams(params);
httpClient.executeMethod(hostConfiguration, method);
System.out.println(method.getResponseBodyAsString());
method.releaseConnection();

Kind regards,

Jasper van Zandbeek

 
 <<patchfile.txt>> 
--- org\apache\commons\httpclient\HttpMethodBase.java.orig      2006-01-05 
04:03:48.000000000 +0100
+++ org\apache\commons\httpclient\HttpMethodBase.java   2006-01-05 
14:02:22.108177600 +0100
@@ -1221,7 +1221,13 @@
         } else {
             host = conn.getHost();
         }
-        int port = conn.getPort();
+        int port = this.params.getVirtualHostPort();
+        if (port == -1) { 
+            port = conn.getPort();
+        }
+        else {
+            LOG.debug("Using virtual host port: " + port);
+        }
 
         // Note: RFC 2616 uses the term "internet host name" for what goes on 
the
         // host line.  It would seem to imply that host should be blank if the
--- org\apache\commons\httpclient\params\HostParams.java.orig   2006-01-05 
04:03:48.000000000 +0100
+++ org\apache\commons\httpclient\params\HostParams.java        2006-01-05 
14:01:37.857044800 +0100
@@ -97,5 +97,23 @@
     public String getVirtualHost() {
         return (String) getParameter(HttpMethodParams.VIRTUAL_HOST);
     }
+   
+    /**
+     * Sets the virtual host port.
+     * 
+     * @param port The port
+     */
+    public void setVirtualHostPort(int port) {
+           setIntParameter(HttpMethodParams.VIRTUAL_HOST_PORT, port);
+    }
+    
+    /**
+     * Returns the virtual host port.
+     * 
+     * @return The virtual host port
+     */
+    public int getVirtualHostPort() {
+        return getIntParameter(HttpMethodParams.VIRTUAL_HOST_PORT, -1);
+    }   
         
 }
--- org\apache\commons\httpclient\params\HttpMethodParams.java.orig     
2006-01-05 04:03:48.000000000 +0100
+++ org\apache\commons\httpclient\params\HttpMethodParams.java  2006-01-05 
14:10:34.334917000 +0100
@@ -265,6 +265,14 @@
     public static final String VIRTUAL_HOST = "http.virtual-host"; 
 
     /**
+     * Defines the virtual host port.
+     * <p>
+     * This parameter expects a value of type (@link Integer).
+     * </p>
+     */
+    public static final String VIRTUAL_HOST_PORT = "http.virtual-host-port";
+
+    /**
      * Sets the value to use as the multipart boundary.
      * <p>
      * This parameter expects a value if type [EMAIL PROTECTED] String}.
@@ -459,6 +467,24 @@
         return (String) getParameter(VIRTUAL_HOST);
     }
     
+    /**
+     * Sets the virtual host port.
+     * 
+     * @param port The host port
+     */
+    public void setVirtualHostPort(int port) {
+        setIntParameter(VIRTUAL_HOST_PORT, port);
+    }
+    
+    /**
+     * Returns the virtual host port.
+     * 
+     * @return The virutal host port.
+     */
+    public int getVirtualHostPort() {
+        return getIntParameter(VIRTUAL_HOST_PORT, -1);
+    }    
+    
     private static final String[] PROTOCOL_STRICTNESS_PARAMETERS = {
         UNAMBIGUOUS_STATUS_LINE,
         SINGLE_COOKIE_HEADER,
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to