【问题标题】:The whois.whois function always gets a timed out errorwhois.whois 函数总是出现超时错误
【发布时间】:2019-10-24 12:42:49
【问题描述】:

whois.whois 函数总是出现超时错误。 起初,我以为是因为我的项目是用 Python 2.7 编写的,但我也签入了 3.7 并得到了同样的错误。 我检查了使用 whois 的在线网站上的地址,并且链接有效并且没有收到此错误。 有谁知道为什么会这样?

import whois

w = whois.whois("https://stackoverflow.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

【问题讨论】:

  • 看来您可能遇到网络问题,无法联系 whois 服务器。您可能需要检查可能会阻止您的程序联系服务器的防火墙设置。

标签: python whois


【解决方案1】:

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

但是,它没有理由不能在 Python2 上运行。

关于代码

这很好用:

In [7]: import whois

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

注意两点:

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

关于网络

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

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

您甚至可以直接在端口 43 上进行 telnet,因为 whois 什么都不做。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2014-09-28
    • 2019-11-03
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多