题
Java中有没有一种相对简单的方法来检查域是否可用?
我需要一个可靠的方法,因此仅检查是否可以建立连接是不够的。
解决方案
有在这里是一个很好的域名注册Java客户端:
https://github.com/ethauvin/Whois
可以通过命令行界面或与它直接运行:
// don't include the www
Whois.main(new String[] {"skytouch.com"});
其他提示
域可用性取决于具有whois客户端。这里是Java中的whois客户端的实现方式的链接:
您需要解析的结果 - 而这取决于你用什么域名服务器,你可能(会)有不同返回的格式。做的最好的事情是要为商业域名注册/注册服务,例如OpenSRS。他们有一个广泛的API,它可以作为一个渠道的合作伙伴使用。下面是API文档:
http://opensrs.com/resources/documentation/opensrs_xmlapi.pdf
HTH,
-AJ
另一个解决方案是使用 Apache Commons lib。简化示例:
import org.apache.commons.net.whois.WhoisClient;
public String getWhois(String domainName){
WhoisClient whois = new WhoisClient();
whois.setConnectTimeout(10000);
whois.setDefaultTimeout(10000);
whois.connect("whois.verisign-grs.com", 43);
String domainWhois = whois.query(domainName);
whois.disconnect();
return domainWhois;
}
检查响应是否等于“不匹配”。Whois 服务器、超时长度和无可用性响应因分机而异,因此您应该为它们准备额外的集合。
Whois服务器列表可以找到:
- http://www.mit.edu/afs/athena/contrib/potluck/Net-Services/whois-servers.list
- https://raw.githubusercontent.com/whois-server-list/whois-server-list/master/whois-server-list.xml
- http://www.nirsoft.net/whois_servers_list.html
如果您尝试同时进行查询,那么您肯定会得到WHOIS响应“您已经达到了已配置的费率限制”。或代码中的显式例外,因此您应该在睡觉后重复查询。
域上执行DNS查找是最简单的解决方案。所有可用域不会有任何DNS记录,大多数注册指定注册时默认的DNS条目。
WHOIS查询将是您最可靠的解决方案,尤其是后面一个欺骗自己的服务器ISP的所有缺少的域名(以“域名未找到”充斥着广告页)。
不隶属于 StackOverflow