これが私が試みる解決策です。小さな概念実証でうまくいったようで、実際のアプリケーションで試してみます。
解決:
URL は、Web サーバーの IP アドレスまたはサーバー ホスト名である必要があります。
例: http:///
HTTP リクエストの場合、「Host」ヘッダーを、アクセスする実際のドメイン名として設定します。私の場合、Tomcat にデプロイしたのは 2 番目の webapp (test.myapp2.com) です。
HTTP 要求を送信します。
最初に、Firefox で「Poster」アドオンを試したときに機能しましたが、私の Java コードでは機能しませんでした。エラーも表示されませんでした。私が設定した「Host」ヘッダーを単に無視しました。Java ライブラリは、一部の Request ヘッダー値のオーバーライドを制限しており、"Host" はその 1 つです。したがって、制限付きヘッダーを受け入れるように明示的に設定する必要がありました。
私が持っていた最初のコードは次のとおりです。
URL url = new URL("http://<IP-ADDRESS>/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Host", "test.myapp2.com");
BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
新しい修正:
String allowRestrictedHeader = System.getProperty("sun.net.http.allowRestrictedHeaders");
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
try {
URL url = new URL("http://<IP-ADDRESS>/");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Host", "test.myapp2.com");
// use connection
.
.
.
}
finally {
if (allowRestrictedHeader == null) {
System.clearProperty("sun.net.http.allowRestrictedHeaders");
} else {
System.setProperty("sun.net.http.allowRestrictedHeaders",
allowRestrictedHeader);
}
}