【发布时间】:2010-02-03 21:48:42
【问题描述】:
Java 中是否有相对简单的方法来检查域是否可用?
我需要一个可靠的方法,所以只检查是否可以建立连接是不够的。
【问题讨论】:
Java 中是否有相对简单的方法来检查域是否可用?
我需要一个可靠的方法,所以只检查是否可以建立连接是不够的。
【问题讨论】:
域可用性取决于是否拥有 whois 客户端。下面是一个用 Java 实现 whois 客户端的链接:
您需要解析结果 - 根据您使用的 whois 服务器,您可能(将)返回不同的格式。最好的办法是为 OpenSRS 等商业 whois/注册服务付费。他们有一个广泛的 API,您可以将其用作注册经销商。以下是 API 文档:
http://opensrs.com/resources/documentation/opensrs_xmlapi.pdf
HTH,
-aj
【讨论】:
这里有一个很好的 Whois Java 客户端:
https://github.com/ethauvin/Whois
您可以从命令行运行它或直接与它交互:
// don't include the www
Whois.main(new String[] {"skytouch.com"});
【讨论】:
另一个解决方案是使用 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 服务器列表:
如果您尝试使查询并发,您肯定会得到 whois 响应“您已达到配置的速率限制”。或代码中的显式异常,因此您应该在睡眠后重复查询。
【讨论】:
对域执行 DNS 查找是最简单的解决方案。所有可用域都没有 DNS 记录,并且大多数注册商在注册时会分配一个默认 DNS 条目。
WHOIS 查找将是您最可靠的解决方案,尤其是在 ISP 欺骗自己的服务器(带有充满广告的“未找到域”页面)以查找任何丢失的域名之后。
【讨论】: