これが私のコードです:
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
ご覧のとおり、2 つのヘッダー (URI からのヘッダーと指定したヘッダー) を送信しますが、URI からのヘッダーではなく、指定したヘッダーHost
を送信したいと考えています。Host
このクライアントで可能ですか?
編集:Java 11では、さらに悪化します(client.send行を:に変更する必要がありますclient.send(request, HttpResponse.BodyHandlers.ofString());
):
java.lang.IllegalArgumentException: restricted header name: "Host"
そのヘッダーをカスタマイズするにはどうすればよいですか (仮想ホストのテストに必要)?
私も試してみましたがsetHeader
、まったく同じ問題が発生しました(ダブルHost
ヘッダーまたは例外のいずれか)。
編集: JDK のバグを報告しました。