Ручная проверка WHOIS подходит для единичных запросов. Для мониторинга конкурентов, верификации лидов или защиты бренда нужна автоматизация через WHOIS API.
Популярные WHOIS API сервисы
| Сервис | Бесплатно | Цена | Особенности |
|---|---|---|---|
| WhoisXML API | 500 запросов/мес | от $19/мес | Нормализованный JSON, история |
| Whoxy.com | 100/мес | от $10/мес | Reverse WHOIS, bulk |
| ip-api.com | 45/мин (IP) | Бесплатно | Только IP-геолокация |
| domain-coupler.io | 10/мес | от $5/мес | Простой, быстрый |
Пример на PHP
// WHOIS-запрос через WhoisXML API
$apiKey = 'YOUR_API_KEY';
$domain = 'example.com';
$url = "https://www.whoisxmlapi.com/whoisserver/WhoisService"
. "?apiKey={$apiKey}&domainName={$domain}&outputFormat=JSON";
$response = file_get_contents($url);
$data = json_decode($response, true);
echo "Регистратор: " . $data['WhoisRecord']['registrarName'] . "
";
echo "Истекает: " . $data['WhoisRecord']['expiresDate'] . "
";
echo "NS: " . implode(', ', $data['WhoisRecord']['nameServers']['hostNames']) . "
";
Пример на Python
import requests
API_KEY = 'YOUR_API_KEY'
domains = ['example.com', 'competitor.com', 'anotherdomain.net']
for domain in domains:
url = f"https://www.whoisxmlapi.com/whoisserver/WhoisService"
params = {
'apiKey': API_KEY,
'domainName': domain,
'outputFormat': 'JSON'
}
resp = requests.get(url, params=params).json()
record = resp.get('WhoisRecord', {})
print(f"{domain}: expires {record.get('expiresDate', 'N/A')}")
Использование whois Python-библиотеки
pip install python-whois
import whois
w = whois.whois('example.com')
print(w.expiration_date) # Дата истечения
print(w.registrar) # Регистратор
print(w.name_servers) # NS-серверы
💡 Мониторинг конкурентов: Запускайте WHOIS-проверку конкурентных доменов еженедельно. Если домен перешёл к новому владельцу или изменились NS-серверы — это сигнал о смене хостинга или продаже бизнеса.
⚠️ Rate limiting: Публичные WHOIS-серверы ограничивают запросы (обычно 1–5/сек). Массовую проверку выполняйте только через платные API с официальными лимитами.
Типичные ошибки при работе с WHOIS API
| Ошибка | Причина |
|---|---|
| HTTP 401 Unauthorized | Неверный или просроченный API-ключ, либо ключ передан в неверном параметре — у разных сервисов это apiKey, api_key или отдельный заголовок |
| HTTP 429 Too Many Requests | Превышен лимит запросов тарифа: массовая проверка списка доменов без паузы между запросами быстро упирается в rate limit |
| WhoisRecord.registrarName: null в ответе | Домен использует «тонкий» WHOIS (характерно для части ccTLD) — регистратор не публикует эти данные в общем протоколе, только через RDAP реестра зоны |
| SSL certificate problem: unable to get local issuer certificate | Устаревший CA-бандл на сервере или в PHP не включено расширение openssl — курл не может проверить цепочку сертификатов API |
| WhoisCommandFailed: No match for domain | Домен свободен, либо whois-сервер реестра временно недоступен; python-whois не делает повторную попытку автоматически |
| Quota exceeded / HTTP 402 Payment Required | Месячная квота бесплатного тарифа исчерпана раньше даты продления — счётчик сервиса сбрасывается только первого числа месяца, а не через 30 дней от регистрации |
Когда WHOIS API не подходит
- Нужна проверка в реальном времени прямо в форме регистрации на сайте — публичные WHOIS-серверы слишком медленные и лимитированные для синхронного запроса на каждый ввод, для этого больше подходит RDAP с собственным кэшем
- Бюджета на платный тариф нет, а объём проверок большой — бесплатные лимиты быстро заканчиваются, а массовые запросы к публичным WHOIS-серверам заканчиваются блокировкой IP
- Нужны исторические данные WHOIS за прошлые годы — обычный запрос отдаёт только текущее состояние, для истории нужен отдельный платный сервис вроде WhoisXML Historical WHOIS
- Домен в зоне с закрытым по умолчанию WHOIS (большинство .eu, многие .de) — персональные данные владельца не вернутся ни через один API, это ограничение на уровне реестра, а не сервиса
Проверка результата
Перед тем как встраивать API в продакшен-скрипт, убедитесь, что ключ реально работает и лимит не исчерпан заранее — это экономит время на отладке всего пайплайна. Базовые понятия WHOIS и ручную проверку разбирают статьи что такое WHOIS и как проверить домен онлайн.
# Проверить, что ключ рабочий, одним curl-запросом
curl -s "https://www.whoisxmlapi.com/whoisserver/WhoisService?apiKey=YOUR_KEY&domainName=example.com&outputFormat=JSON" | head -c 200
# Посчитать, сколько доменов из списка реально получили ответ
grep -c '"expiresDate"' results.json