我使用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的表现会有所不同吗?
答案 0 :(得分:1)
由于您的问题是遍历代理(在您的情况下是Servlet + HTTPClient),请将您的客户端配置为使用localhost:8080
作为代理,并将URL设置为 normal :{{1} }:
http://localhost:8081/...