3

我使用 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 的行为是否不同?

4

1 回答 1

1

由于您的问题是遍历代理(在您的情况下是 Servlet+HTTPClient),请将您的客户端配置localhost:8080为用作代理和正常的 url : http://localhost:8081/...:

hostConfiguration.setProxy("localhost", 8080);
hostConfiguration.setHost("localhost", 8081);
于 2013-06-13T12:03:33.737 回答