如果任何TLD的域名已经注册或可用,我需要一种可靠的方法来检查Python。大胆的短语是我正在努力的关键点。
p = subprocess.Popen(['whois', 'example.com'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
r = p.communicate()[0]
print(r.decode())
这样做效果更好。除了它不那么可靠。我尝试了一个特定的域名,并且“超出了您的连接限制。请放慢速度,稍后再试。”好吧,超出限制的不是我。在一个巨大的办公室里,在一个IP后面意味着其他人可能会在我进行查询之前达到极限。已有类似的问题:
......但他们要么只处理一组有限的TLD,要么不会受到可靠性的困扰。
如果您没有特定的访问权限(如注册商),并且您没有针对特定TLD(因为某些TLD确实有一个称为域可用性的特定公共服务),唯一有意义的工具就是查询whois服务器。
那你至少有以下两个问题:
对于第二点,通常的方法适用(处理延迟,使用多个端点等)
第一点,在我的另一个回复中:https://unix.stackexchange.com/a/407030/211833你可以根据你使用的包装器和一些对策来找到你所观察到的一些解释。另见我的其他答复:https://webmasters.stackexchange.com/a/111639/75842,特别是第2点。
请注意,根据您的具体要求,如果您能够至少更改其中的一部分,您可能还有其他解决方案。例如,对于通用顶级域名(gTLD),如果您容忍延迟24小时,您可以使用已发布的注册管理机构区域文件来查找已注册的域名(已发布的域名,而不是所有域名)。
此外,为什么你在一般意义上说使用第三方有其弱点,如果你找到一个有价值的注册商,它既可以访问许多注册表并为你提供API,那么你就可以根据自己的需要使用它。
简而言之,我认为您无法在所有情况下完成此任务(100%可靠性,100%TLD等)。您需要妥协,但它们取决于您的初始需求。
同样非常重要的是:不要运行whois命令,这会产生许多安全性和性能问题。使用编程语言中的相应库来进行whois查询或只是在端口43上打开TCP套接字并在一行CR + LF上发送查询,读回一段文本,这基本上只是在RFC3912中定义的。