【问题标题】:Using PHP to get whois data?使用 PHP 获取 whois 数据?
【发布时间】:2016-01-02 23:26:25
【问题描述】:

我正在遍历数据库中的行以从 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 NameRegistrant PhoneRegistrant Country

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

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

【问题讨论】:

  • 我建议使用var_dump() 转储查找结果并查看是否已经存在您要查找的数据,而不是使用原始数据。

标签: php whois


【解决方案1】:

正如我最近在另一个答案中指出的那样,parsing WHOIS data is a complex, messy affair。任何标准都未指定 WHOIS 响应的确切格式,并且并非所有注册管理机构/注册服务机构都会使用您在此处尝试解析的格式。 (有些使用不同的标签来标记您正在搜索的字段,有些使用在没有上下文的情况下模棱两可的标签,有些根本不标记某些字段,有些甚至不会包含您在此处搜索的信息。 ) 更糟糕的是,如果您明显试图从他们那里提取多个回复,一些注册机构/注册商会严重限制您的评级。简而言之,我建议您尽可能避免尝试解析 WHOIS 响应。

不过,为了解决您的即时问题,您可以创建一个关联数组来表示 WHOIS 响应,如下所示:

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

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

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

【讨论】:

  • 嗨,我收到了PHP Parse error: syntax error, unexpected '[' on line 18,这是这一行:$arr = [];
  • @user10848 听起来您使用的是旧版本的 PHP。升级到受支持的版本 (>=5.5),然后重试。
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2013-03-10
相关资源
最近更新 更多