Точно ли использовать `запросы`, чтобы проверить, зарегистрировано ли доменное имя?

Я заметил, что запрос неверного URL requests.get(invalid_url) выбрасывает следующие исключения:

Traceback (most recent call last):
  File "/usr/lib/python3.4/socket.py", line 530, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 607, in urlopen
    raise MaxRetryError(self, url, e)
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='sparkandshine.me', port=80): Max retries exceeded with url: / (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)

During handling of the above exception, another exception occurred:
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 378, in send
    raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='sparkandshine.me', port=80): Max retries exceeded with url: / (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known)

Точно ли определить, зарегистрировано ли доменное имя или нет, перехватывая эти исключения? Вот исходный код:

#!/usr/bin/env python3
import http
import urllib3
import requests

url = 'http://example.com'
try :
    r = requests.get(url)
except (http.client.HTTPException, urllib3.exceptions.MaxRetryError, requests.exceptions.ConnectionError):
    print(url) #this domain name is not registered?

2 ответа

Решение

Нет; вполне нормально, чтобы домен был зарегистрирован и не имел IP-адреса для имени корневого домена, не говоря уже о том, чтобы сервер работал на порте 80 этого IP-адреса.

Как уже упоминалось @tripleee, это не очень точно. Я нахожу другой способ определить, зарегистрировано ли доменное имя или нет, используя модуль python pywhois.

Чтобы установить его,

pip install python-whois

Вот пример.

#!/usr/bin/env python
import whois

url = 'example.com'
try :
    w = whois.whois(url)
except (whois.parser.PywhoisError):
    print(url)

PS: не поддержка Python3.

Другие вопросы по тегам