JavaのHTTPクライアントに「ホスト」ヘッダーをカスタマイズする方法

クシシュトフ・Krasoń:

ここに私のコードは次のとおりです。

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つの送信Hostヘッダ(URIから1、私は指定されたもの)を、私はそれがお送りしたいと思いHost、私はURIから1、ない指定したヘッダーを。このクライアントを持つことが可能ですか?

EDIT:ではJavaの11、それも悪くなる(あなたがclient.sendラインを変更する必要がありますclient.send(request, HttpResponse.BodyHandlers.ofString());):

java.lang.IllegalArgumentException: restricted header name: "Host"

どのように私は(仮想ホストをテストするために必要な)そのヘッダーをカスタマイズすることができますか?

私も試みsetHeaderとまったく同じ問題(二重のいずれかを取得しHost、ヘッダー、または例外)。

編集:私は報告したJDKのバグを

クシシュトフ・Krasoń:

Javaの12(EAビルド22)のとおり、それは追加のプロパティによって解決されていますjdk.httpclient.allowRestrictedHeaders(参照https://bugs.openjdk.java.net/browse/JDK-8213696)。

今一つは上書きすることができHostでコードを実行することにより(または他の任意の制限ヘッダ): java -Djdk.httpclient.allowRestrictedHeaders=host ...

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=168119&siteId=1