2

Я использую Apache Commons HttpClient 3.1 как своего рода обратный прокси. Этот прокси-сервер работает в контейнере сервлетов в порту 8081 и проксирует некоторые из запросов на порт 8080 на том же сервере. Поскольку старый сервер на порту 8080 создает некоторые абсолютные URL-адреса, используя заголовок HTTP Host, я хочу явно установить этот заголовок.Настройка порта виртуального хоста в Apache HttpClient

It is not possible to set the Host-header as you set other headers, так как 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 по-другому?

+0

Я не подумайте, что вам нужно установить порт, хост может быть изменен, так как многие имена узлов могут иметь один и тот же IP-адрес, но есть только порт: тот, к которому вы открываете соединение. 'hostParams.setVirtualHost (" localhost ");' – gma

+0

@gma. Это заставит устаревшее приложение отправить «Location: http: // localhost: 8080/foo» и создать некоторые ссылки в других местах с портом 8080 в URL-адресе. [Порт является частью заголовка хоста] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23). –

+0

Да, но это не имеет значения, кроме прокси, которым HttpClient не является. – gma

ответ

1

В вашей задаче обхода прокси-сервер (который в вашем случае является Servlet + HTTPClient), настроить ваш клиент на использование localhost:8080 в качестве прокси-сервера и URL, как нормальной: http://localhost:8081/...:

hostConfiguration.setProxy("localhost", 8080); 
hostConfiguration.setHost("localhost", 8081); 
Смежные вопросы