在Apache HttpClient中设置虚拟主机端口

时间:2013-06-13 09:21:01

标签: java apache-httpclient-4.x apache-commons-httpclient

我使用Apache Commons HttpClient 3.1作为一种反向代理。此代理服务器在端口8081中的servlet容器中运行,并将某些请求代理到同一服务器上的端口8080。由于端口8080上的旧服务器使用HTTP Host标头构建一些绝对URL,我想明确设置该标头。

It is not possible to set the Host-header as you set other headers,因为HttpClient会自动覆盖您设置的值。我发现更改Host - 标头的唯一方法是设置虚拟主机:

HttpClient = ...
HttpMethod = ...

HostParams hostParams = new HostParams();
hostParams.setVirtualHost("localhost:8081"); 
hostConfiguration.setParams(hostParams);
hostConfiguration.setHost("localhost", 8080);

client.executeMethod(hostConfiguration, method);

但这不起作用,因为HttpClient似乎将它连接的端口添加到Host

11:07:05.011 [qtp1813719644-21] DEBUG httpclient.wire.header - >> "Host: localhost:8081:8080[\r][\n]"

我能以任何方式解决这个问题吗?如果没有,Apache Httpclient 4.x的表现会有所不同吗?

1 个答案:

答案 0 :(得分:1)

由于您的问题是遍历代理(在您的情况下是Servlet + HTTPClient),请将您的客户端配置为使用localhost:8080作为代理,并将URL设置为 normal :{{1} }:

http://localhost:8081/...