如何在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了域名,如果我没有得到答复,域名要么离线要么不存在。