2015-07-21 8 views
1

я заметил, что запрос неверный 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? 
+0

Лучший способ проверить доступность домена - это, скорее всего, whois, а не просто пытаться разрешить это имя. –

+0

@CongMa Я только что узнал, что есть модуль python с именем [pywhois] (https://bitbucket.org/richardpenman/pywhois). Чтобы установить его, 'pip install python-whois'. – SparkAndShine

+0

Нет существующего модуля, как я знаю. Вам лучше использовать 'запросы' для поиска в домене на' godaddy' – LittleQ

ответ

4

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

3

Как указано @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.

+1

Там есть несколько клиентов Python whois, но любой из них должен работать для тривиального случая проверки наличия или отсутствия домена. Различия будут заключаться в обработке цепочки ответов, чтобы найти авторитарного регистратора и разобрать типично не машиночитаемые детали записи. Это все еще не идеально, потому что некоторые TLD не поддерживают whois и заставляют вас использовать свою собственную нестандартную систему запросов, обычно это обычная веб-работа. – tripleee