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
您的代码至少有两个问题,并且您可能也有网络问题。
但是,没有理由在Python2上不起作用。
这很好用:
In [7]: import whois
In [8]: print whois.query('stackoverflow.com').expiration_date
2020-02-02 11:59:59
注意两件事:
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