如何在Java中检查域是否存在?

假设我的电子邮件地址是xyz@yahoo.com ,我想检查yahoo.com是否是有效的域名。

谁能告诉我哪个Java API可用于此?

在给定主机名的情况下, InetAddress具有getByName()方法来确定主机的IP地址。

如果找不到主机的IP地址(如果给定的主机名无效),将抛出UnknownHostException

因此,您只需在调用InetAddress.getByName()时尝试捕获UnknownHostException 。 如果捕获到UnknownHostException则表示您的输入主机名无效。

你可以做的一件事是试图解决“yahoo.com”。 像这样的东西:

 public static void main(String[] args) throws UnknownHostException { InetAddress inetAddress = InetAddress.getByName("yahoo.com"); System.out.println(inetAddress.getHostName()); System.out.println(inetAddress.getHostAddress()); } 

哪个输出:

 yahoo.com 67.195.160.76 

另一种可能性是检查entred域的MX。

http://www.mxtoolbox.com/SuperTool.aspx

它不是Java API,但您始终可以解析HTML响应。

这意味着如果邮件服务的提供者没有被列入黑名单,那么它可能是安全的并且是真实的地址。

但正如已经说过的,某些服务器总是可以为这种服务定义安全限制。

另一点,存在一些提供临时电子邮件的服务(mailinator.com,jetable.org等等)。如果您想阻止用户注册这样的电子邮件,您还必须检查这些域。

UPDATE

我发现了一个有用的REST API ,只要您使用有限数量的请求, 它就似乎是免费的。

例如: https : //dns-api.org/MX/amazon.com返回JSON:

 [ { "name" : "amazon.com", "ttl" : 677, "value" : "5 amazon-smtp.amazon.com.", "type" : "MX" } ] 

您可以使用org.apache.commons.validator.routines.DomainValidator。

首先添加maven依赖

  commons-validator commons-validator 1.6  

然后:

 boolean isValid = DomainValidator.getInstance().isValid("yahoo.com"); 

我不知道这是否是最好的方法,但我已经为VB.NET程序做了类似的事情:

我只是ping了域名,如果我没有得到答复,域名要么离线要么不存在。