Использование PHP для получения данных whois?


Я просматриваю строки в своей базе данных, чтобы получить информацию из результатов whois.

Вот что у меня есть прямо сейчас:

function GetEmailFromWhois($domain){
    $whois = new Whois();
    $query = $domain;
    $whois->deep_whois=TRUE;
    $result = $whois->Lookup($query, false);
    $raw_data = $result["rawdata"];

    $email = "";

    foreach($raw_data as $item){
        $items = explode(":",$item);
        if($items[0] == "Registrant Email"){
            $email = $items[1];
        }
    }
    return $email;
}

Приведенный выше код получает Registrant Email из результатов whois.

Я ссылаюсь на это позже в своем коде следующим образом: $email = GetEmailFromWhois($domain);

Однако, одновременно с получением электронного письма владельца регистрации, я также хотел бы получить Registrant Name, Registrant Phone, и Registrant Country.

Я мог бы просто скопировать код выше еще 3 раза для каждого из этих дополнительных полей, но это было бы потому что для каждого домена будет 4 запроса whois - вместо одного.

Кто-нибудь знает, как я могу получить нужную мне информацию в одном запросе, а затем использовать ее позже в своем коде?

 2
Author: duskwuff, 2016-01-03

1 answers

Как я недавно отметил в другом ответе, анализ данных WHOIS - это сложное, запутанное дело. Точный формат ответов WHOIS не указан ни в одном стандарте, и не все реестры/регистраторы будут использовать формат, который вы пытаетесь проанализировать здесь. (Некоторые используют разные метки для обозначения полей, которые вы ищете, некоторые используют метки, которые неоднозначны без контекста, некоторые вообще не помечают определенные поля, а некоторые даже не включают информацию, которую вы ищете здесь.) Хуже того, некоторые реестры/регистраторы будут сильно ограничивать вас в скорости, если станет очевидно, что вы пытаетесь извлечь из них больше, чем несколько ответов. Короче говоря, я бы рекомендовал вам избегать попыток анализировать ответы WHOIS, если это вообще возможно.

Чтобы решить вашу непосредственную проблему, вы можете создать ассоциативный массив для представления ответа WHOIS следующим образом:

$arr = [];
foreach($raw_data as $item) {
    list($k, $v) = explode(":", $item);
    $arr[$k] = $v;
}

Это даст вам ассоциативный массив результатов, чтобы вы могли извлекать отдельные значения используя, например,

$email = $arr["Registrant Email"];
 2
Author: duskwuff, 2017-05-23 12:15:19