Вот мой код:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:8081/"))
.header("Host", "test.example.com")
.build();
client.send(request, HttpResponse.BodyHandlers.ofString());
В результате я вижу, что вышеприведенный код отправляет:
GET / HTTP/1.1
Connection: Upgrade, HTTP2-Settings
Content-Length: 0
Host: 127.0.0.1:8081
HTTP2-Settings: AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Upgrade: h2c
User-Agent: Java-http-client/10
Host: test.example.com
Как вы можете видеть, он отправляет два заголовка Host
(один из URI и тот, который я указал), но я хотел бы, чтобы он отправил указанный мной заголовок Host
, а не тот из URI.
Возможно ли с этим клиентом?
РЕДАКТИРОВАТЬ: В Java 11, это становится еще хуже (вам нужно изменить строку client.send на: client.send(request, HttpResponse.BodyHandlers.ofString());
):
java.lang.IllegalArgumentException: restricted header name: "Host"
Как мне настроить этот заголовок (необходимый для тестирования виртуальных хостов)?
Я также попробовал setHeader
и получил точно такую же проблему (либо двойные Host
заголовки, либо исключение).
EDIT: я сообщил об ошибке JDK .