Java:使用特定ip服务器的URL下载网页

Java:使用特定ip服务器的URL下载网页,java,url,network-programming,ip,Java,Url,Network Programming,Ip,有很多关于如何下载网页的指南,给出了java中的URL。 在这种情况下,从DNS提供的服务器下载网页(DNS返回承载网页的其中一个服务器的ip) 我的问题是-给定服务器的特定IP,如何使用其URL下载托管在特定服务器中的网页 为了澄清这个问题,考虑一个像谷歌这样的网站,它由多个服务器托管。如果我仅使用“www.google.com”URL下载网页,我将从其中一个托管服务器(DNS将选择)获得该网页。但是,假设我拥有托管www.google.com的其中一台服务器的IP,并且我希望专门从该服务器下

有很多关于如何下载网页的指南,给出了java中的URL。 在这种情况下,从DNS提供的服务器下载网页(DNS返回承载网页的其中一个服务器的ip)

我的问题是-给定服务器的特定IP,如何使用其URL下载托管在特定服务器中的网页

为了澄清这个问题,考虑一个像谷歌这样的网站,它由多个服务器托管。如果我仅使用“www.google.com”URL下载网页,我将从其中一个托管服务器(DNS将选择)获得该网页。但是,假设我拥有托管

www.google.com
的其中一台服务器的IP,并且我希望专门从该服务器下载网页-我无法单独使用URL,因为我无法保证我从正确的服务器下载了网页


这个问题的完整答案也应该支持HTTPS协议。

如果地址不是SSL/TLS,那么在请求头中发送类似于
主机:www.google.co.jp
的内容至少应该有效 当目标http服务器使用基于名称的虚拟主机时

出于java安全原因,需要设置
sun.net.http.AllowerPrictedHeaders

我用谷歌作为一个简单的例子。我不确定这种方法是否适用于更复杂的URL(包括路径等)。@RannLifshitz我用路径更新了这个问题。我不能向您保证该代码在所有网站上都有效,但基于名称的虚拟主机被广泛使用,因此它应该在大多数网站上都有效。如果您发现一个站点无法使用带有
host
标题的ip地址请求,请发布另一个问题。您建议如何处理基于https的URL(当尝试基于服务器ip获取URL时)?
System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
URL url = new URL("http://172.217.26.100/about/"); // one of the google IP
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestProperty("host","www.google.co.jp"); // get japanese google site, you may obtain canada site by changing to `www.google.ca`
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
System.out.println(reader.readLine());