如何使用 Java 中的 InetAddress 对象创建 URL 对象?
how to create a URL object using an InetAddress object in Java?
我需要从 Java 中的 IPv4 地址(String 或 InetAddress 对象 - 任何一个都可以)创建一个 http 或 https URL 对象。我已经在这里待了 10 个小时了。
撞墙的尝试如下所述:
尝试 #1:我试图通过组装一个字符串来制作 URL,然后将其提供给 URL 构造函数。
- 教科书指出 URL 可以是 "protocol://host",host 可以是主机名或 IP 地址。但是像这样创建 URL:
URL a = new URL("http://151.101.65.69");
并打开流到此 URL (a
) 会给出 HTTP 错误 500(内部服务器错误 - 发生意外情况服务器不知道如何处理)。
- 让我生气的是
URL a = new URL("http://whosebug.com");
有效。
- 此时我卡住了。我不知道要改变什么,或者如何前进。
尝试 #2:我尝试使用 InetAddress class 中的 "getHostName()" 方法对 IP 地址进行反向查找。
- 这应该 return 通过执行反向 DNS 查找的主机名。然而,我一直在尝试 151.101.65.69(Whosebug 网络服务器 IP 地址),但查找失败。失败我的意思是 IP 地址被 returned 作为字符串而不是主机名作为字符串。我阅读了 Oracle 文档 http://docs.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html#getHostName(),但我不明白如何克服文档中提到的 "security manager"(或者如果这确实是反向查找失败的原因)。
- 我也试过"getCannonicalHostName()",但是也没用。
我想知道如何使用 IP 地址打开网站。看起来我的浏览器 运行 遇到了与我的代码相同的问题。我阅读了 How to access site through IP address when website is on a shared host?,但我没有任何用户名,因为我希望能够打开用户拥有 IP 地址的任何网站。添加端口(比如80)好像不行;将用户名留空或使用通用 'user' 或 'guest'.
也不会
我需要从 IPv4 字符串或 InetAddress 对象创建一个 URL 对象,但我被卡住了。我知道像您这样知识渊博的程序员可能会说从 IP 地址制作 URL 不是 IP 地址的用途,或者指出我没有包括 URL 的文件部分,但这不是目前的问题。你能帮我解决我的核心挑战吗?
以下代码适合我。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
public class InetAddressMain {
public static void main(String[] args) {
try {
InetAddress addr = InetAddress.getByName("172.217.4.110");
URL url = new URL("http://"+addr.getHostAddress());
InputStream is = url.openStream();
InputStreamReader isReader = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isReader);
String line;
while((line = reader.readLine()) != null){
System.out.println(line);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
答案由D.B提供。很好。我有非常相似的代码;但是你会发现这段代码并不是每次都有效。您将 IPv4 地址传递给提供的代码 D.B。答案将无法打开 URL 流(例如 Whosebug 的 IP 地址)。我认为问题出在我的编码上,这就是我希望在 Whosebug 上获得帮助的原因。但是我现在意识到问题是我在问这个问题时缺乏理解。我现在明白,拥有 IPv4 地址不足以打开网络上的每个网站。任何时候一个服务器托管多个网站,IP地址可以用来连接服务器,但不能同时识别我们要访问的网站open/access。这位先生解释得很好:http://ask-leo.com/why_doesnt_accessing_a_site_by_its_ip_address_work.html
@D.B。感谢您抽出时间提供帮助。非常感谢!
我需要从 Java 中的 IPv4 地址(String 或 InetAddress 对象 - 任何一个都可以)创建一个 http 或 https URL 对象。我已经在这里待了 10 个小时了。
撞墙的尝试如下所述:
尝试 #1:我试图通过组装一个字符串来制作 URL,然后将其提供给 URL 构造函数。
- 教科书指出 URL 可以是 "protocol://host",host 可以是主机名或 IP 地址。但是像这样创建 URL:
URL a = new URL("http://151.101.65.69");
并打开流到此 URL (a
) 会给出 HTTP 错误 500(内部服务器错误 - 发生意外情况服务器不知道如何处理)。 - 让我生气的是
URL a = new URL("http://whosebug.com");
有效。 - 此时我卡住了。我不知道要改变什么,或者如何前进。
- 教科书指出 URL 可以是 "protocol://host",host 可以是主机名或 IP 地址。但是像这样创建 URL:
尝试 #2:我尝试使用 InetAddress class 中的 "getHostName()" 方法对 IP 地址进行反向查找。
- 这应该 return 通过执行反向 DNS 查找的主机名。然而,我一直在尝试 151.101.65.69(Whosebug 网络服务器 IP 地址),但查找失败。失败我的意思是 IP 地址被 returned 作为字符串而不是主机名作为字符串。我阅读了 Oracle 文档 http://docs.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html#getHostName(),但我不明白如何克服文档中提到的 "security manager"(或者如果这确实是反向查找失败的原因)。
- 我也试过"getCannonicalHostName()",但是也没用。
我想知道如何使用 IP 地址打开网站。看起来我的浏览器 运行 遇到了与我的代码相同的问题。我阅读了 How to access site through IP address when website is on a shared host?,但我没有任何用户名,因为我希望能够打开用户拥有 IP 地址的任何网站。添加端口(比如80)好像不行;将用户名留空或使用通用 'user' 或 'guest'.
也不会
我需要从 IPv4 字符串或 InetAddress 对象创建一个 URL 对象,但我被卡住了。我知道像您这样知识渊博的程序员可能会说从 IP 地址制作 URL 不是 IP 地址的用途,或者指出我没有包括 URL 的文件部分,但这不是目前的问题。你能帮我解决我的核心挑战吗?
以下代码适合我。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
public class InetAddressMain {
public static void main(String[] args) {
try {
InetAddress addr = InetAddress.getByName("172.217.4.110");
URL url = new URL("http://"+addr.getHostAddress());
InputStream is = url.openStream();
InputStreamReader isReader = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isReader);
String line;
while((line = reader.readLine()) != null){
System.out.println(line);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
答案由D.B提供。很好。我有非常相似的代码;但是你会发现这段代码并不是每次都有效。您将 IPv4 地址传递给提供的代码 D.B。答案将无法打开 URL 流(例如 Whosebug 的 IP 地址)。我认为问题出在我的编码上,这就是我希望在 Whosebug 上获得帮助的原因。但是我现在意识到问题是我在问这个问题时缺乏理解。我现在明白,拥有 IPv4 地址不足以打开网络上的每个网站。任何时候一个服务器托管多个网站,IP地址可以用来连接服务器,但不能同时识别我们要访问的网站open/access。这位先生解释得很好:http://ask-leo.com/why_doesnt_accessing_a_site_by_its_ip_address_work.html
@D.B。感谢您抽出时间提供帮助。非常感谢!