使用PHP获取whois数据?

问题描述 投票:0回答:2

我正在循环访问数据库中的行以从 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;
}

上面的代码从 whois 结果中获取

Registrant Email

我稍后在我的代码中引用它,如下所示:

$email = GetEmailFromWhois($domain);

但是,在收到注册电子邮件的同时,我还想收到

Registrant Name
Registrant Phone
Registrant Country

我可以为每个附加字段再复制上面的代码 3 次,但这会导致每个域有 4 个 whois 查询 - 而不是只有一个。

有人知道如何在单个查询中获取所需的信息,然后在我的代码中使用它吗?

php whois
2个回答
4
投票

正如我最近在另一个答案中指出的那样,解析 WHOIS 数据是一件复杂、混乱的事情。任何标准均未指定 WHOIS 响应的确切格式,并且并非所有注册管理机构/注册服务商都会使用您在此处尝试解析的格式。 (有些使用不同的标签来标记您正在搜索的字段,有些使用没有上下文的模糊标签,有些根本不标记某些字段,有些甚至不包含您在此处搜索的信息。 ) 更糟糕的是,如果您明显试图从某些注册管理机构/注册商那里获取更多回复,则会严重限制您的速率。简而言之,我建议您尽可能避免尝试解析 WHOIS 响应。

为了解决您的“立即”问题,您可以创建一个关联数组来表示 WHOIS 响应,如下所示: $arr = []; foreach($raw_data as $item) { list($k, $v) = explode(":", $item); $arr[$k] = $v; }

这将为您提供结果的关联数组,因此您可以使用例如提取单个值

$email = $arr["Registrant Email"];



0
投票
© www.soinside.com 2019 - 2024. All rights reserved.