我使用 Apache Commons HttpClient 3.1 作为一种反向代理。该代理服务器在 8081 端口的 servlet 容器中运行,并将一些请求代理到同一台服务器上的 8080 端口。由于端口 8080 上的旧服务器使用 HTTPHost
标头构建了一些绝对 URL,因此我想显式设置该标头。
无法像设置其他 headers 一样设置 Host-header,因为 HttpClient 会自动覆盖您设置的值。我发现更改Host
-header 的唯一方法是设置虚拟主机:
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 的行为是否不同?