The port number specified with calling setHost of HostConfiguration is the port
used for the connection and the port given in the Host request header. So in
your example, the connection is to localhost:100 and the Host header is Host:
localhost:100. In the example I've given, the connection is to localhost:80 and
the Host header is Host: localhost:100.
It is currently not possible to have a different port number for the connection
and in the Host header. The provided patch adds this functionality.
Jasper
-----Oorspronkelijk bericht-----
Van: Oleg Kalnichevski [mailto:[EMAIL PROTECTED]
Verzonden: do 5-1-2006 17:16
Aan: [email protected]
CC:
Onderwerp: Re: [PATCH] HttpClient: possibility to specify port number
in Host headers
On Thu, Jan 05, 2006 at 03:36:04PM +0100, Jasper van Zandbeek wrote:
> 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
>
What's wrong with this?
HttpClient httpClient = new HttpClient();
HttpMethod method = new GetMethod();
HostConfiguration hostConfiguration = new HostConfiguration();
hostConfiguration.setHost("localhost", 100, "http");
HostParams params = new HostParams();
params.setVirtualHost("localhost");
hostConfiguration.setParams(params);
httpClient.executeMethod(hostConfiguration, method);
System.out.println(method.getResponseBodyAsString());
method.releaseConnection();
Oleg
>
> <<patchfile.txt>>
Content-Description: 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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]