InetAddress.getAllByName()抛出UnknownHostException

时间:2017-04-25 04:32:55

标签: java ios eclipse oracle-maf

作为Apple审核小组批准我的应用程序的持续传奇的一部分,我遇到了另一个障碍。

正如标题所示,在调用InetAddress.getAllByName("https://artatlas.io")时会抛出UnknownHostException。这只发生在他们的测试过程中。当我在我的本地NAT64网络上测试我的应用程序时(如Apple所建议的那样);错误永远不会发生,应用程序按预期工作。

我正在运行的代码:

System.setProperty("java.net.preferIPv6Addresses", "true");
System.setProperty("networkaddress.cache.negative.ttl", "0");
InetAddress[] addrs;

try {
    addrs = InetAddress.getAllByName("https://artatlas.io");
    String addresses = "";
    for(InetAddress addr: addrs){
        addresses += addr + "\n";
    }
    System.out.println("Addresses: " + addresses + "\n");
} catch (IOException e1) {
    e1.printStackTrace();
}

我发现的是,我在“https://”附加的任何内容似乎都会返回相同的单个IP地址:

Addresses: https://artatlas.io/122.150.5.20
Addresses: https://google.com/122.150.5.20
Addresses: https://www.google.com/122.150.5.20

我可以摆脱https,但后来我担心我以后使用HttpsURLConnection会失败(我的连接必须是https)

testUrl = new URL("https://artatlas.io");
testConn = (HttpsURLConnection) testUrl.openConnection();

我知道HttpsURLConnection使用InetAddress实例来形成它的连接,所以问题是它用什么过程来解析URL字符串,是否删除了协议?这里的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

主机名不应包含协议。无论您打算使用哪种协议,主机都是相同的。无论后来的HTTPS连接是否失败,InetAddress.getAllByName()都与它无关(它不会,也不能保证成功或失败)。

此时您只处理DNS,因此它只是foo.com123.45.67.89或IPv6地址。