这是我要尝试的解决方案。它似乎适用于一个小的概念证明,我将在实际应用中尝试。
解决方案:
URL 应该是网络服务器的 IP 地址或服务器主机名。
例如:http:///
对于 HTTP 请求,将“Host”标头设置为您要访问的实际域名。就我而言,这是我在我的 tomcat 中部署的第二个 webapp (test.myapp2.com)。
发送 HTTP 请求。
首先,当我在 Firefox 中尝试使用“海报”插件时它起作用了,但它在我的 Java 代码中不起作用。它也没有显示任何错误。它只是忽略了我设置的“主机”标题。Java 库限制覆盖某些请求标头值,“主机”就是其中之一。所以我必须明确地设置它来接受受限制的标头。
我的初始代码是:
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);
}
}