whois.whois 函数总是出现超时错误

The whois.whois function always gets a timed out error

whois.whois 函数总是出现超时错误。 一开始我以为是因为我的项目是用Python2.7写的,结果我又查了3.7也报同样的错误。 我检查了使用 whois 和 link 的在线网站上的地址,但没有收到此错误。 有人知道为什么会这样吗?

import whois

w = whois.whois("https://whosebug.com")

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python37\lib\site-packages\whois\__init__.py", line 43, in whois
    text = nic_client.whois_lookup(None, domain.encode('idna'), flags)
  File "C:\Program Files\Python37\lib\site-packages\whois\whois.py", line 264, in whois_lookup
    result = self.whois(query_arg, nichost, flags)
  File "C:\Program Files\Python37\lib\site-packages\whois\whois.py", line 142, in whois
    s.connect((hostname, 43))
socket.timeout: timed out

您的代码至少有两个问题,您也可能有网络问题。

但是,没有理由不在 Python2 上工作。

关于代码

这很好用:

In [7]: import whois

In [8]: print whois.query('whosebug.com').expiration_date
2020-02-02 11:59:59

注意两点:

  • whois 是关于域名的,而不是 URLs;所以你应该传递一个域名;请更普遍地注意,对于新的尝试,您应该查看 RDAP 而不是 whois,因为您将获得更好的体验
  • 你需要使用 whois.query 而不是 whois.whois (你不是说你使用的是哪个版本的库,但是在 https://pypi.org/project/whois/ 的文档页面上你可以清楚地看到它是whois.query 所以我不知道你的 whois.whois` 来自哪里)。

关于网络

您显示网络错误。这不是 100% 清楚,但您可能有权也可能无法访问您要查询的 whois 服务器。

简单的测试方法:只需在与您的代码相同的框中使用命令行 whois(但再次使用域名,而不是 URL 作为参数),您将看到什么正在发生。

您甚至可以直接在端口 43 上进行远程登录,因为 whois 不会执行任何其他操作。

$ echo 'whosebug.com' | nc whois.verisign-grs.com 43 | grep 'Expiry'
   Registry Expiry Date: 2020-02-02T11:59:59Z