作为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字符串,是否删除了协议?这里的正确方法是什么?
答案 0 :(得分:1)
主机名不应包含协议。无论您打算使用哪种协议,主机都是相同的。无论后来的HTTPS连接是否失败,InetAddress.getAllByName()
都与它无关(它不会,也不能保证成功或失败)。
此时您只处理DNS,因此它只是foo.com
或123.45.67.89
或IPv6地址。