whois.whois函数总是收到超时错误

问题描述 投票:0回答:1

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

python whois
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.