Функция whois.whois всегда получает ошибку тайм-аута - PullRequest
0 голосов
/ 24 октября 2019

Функция 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

1 Ответ

1 голос
/ 26 октября 2019

В вашем коде есть как минимум две проблемы, и у вас могут быть проблемы с сетью.

Однако нет никаких причин, по которым он не работает на 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 в качестве параметра), и вы увидите, что происходит.

Вы можете даже напрямую подключиться к telnet через порт 43, поскольку whois больше ничего не делает.

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