spatie/laravel-rdap

在 Laravel 应用中执行 RDAP 查询

1.1.0 2024-03-11 16:13 UTC

README

Latest Version on Packagist Total Downloads

RDAP 是一种查询域名注册数据的协议。它被视为 WHOIS 的继任者。与 WHOIS 相比的主要优势是返回的数据是标准化的,并且以 JSON 格式组织。RDAP 的一个缺点是,截至写作之时,并非所有顶级域名都受到支持。

此包包含几个用于从 RDAP 查询基本数据的类。它还提供开箱即用的响应缓存。

支持我们

我们投入了大量资源来创建 最佳的类开源包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感激您从家乡寄给我们一张明信片,说明您正在使用我们的哪些包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙上

安装

您可以通过 composer 安装此包

composer require spatie/laravel-rdap

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="rdap-config"

这是发布配置文件的内容

<?php

use Carbon\CarbonInterval;

return [
    /*
     * When making an RDAP query, we first have got to make a request to determine
     *  the server responsible for the tld of the query. Here you can specify
     * how long we should cache the server URLs.
     */

    'tld_servers_cache' => [
        'store_name' => null,
        'duration_in_seconds' => CarbonInterval::week()->totalSeconds,
    ],

    /*
     * RDAP seem to be a bit unreliable when responding to domain queries. 
     * We solve this by attempting a request to RDAP a couple of times 
     * until we get a response.
     */
    'domain_queries' => [
        /*
         * How long we should wait per attempt to get a response
         */
        'timeout_in_seconds' => 5,
        /*
         * How many times we should attempt getting a response
         */
        'retry_times' => 3,
        /*
         * The time between attempts
         */
        'sleep_in_milliseconds_between_retries' => 1000,
    ],
];

用法

执行域名查询

要获取有关域的信息,调用 domain()

use Spatie\Rdap\Facades\Rdap;

$domain = Rdap::domain('google.com'); // returns an instance of `Spatie\Rdap\Responses\DomainResponse`

如果您传递一个不存在的域名,则 domain() 函数将返回 null

重试请求

RDAP 响应域名请求时似乎有点不可靠。我们通过尝试向 RDAP 发送几次请求直到我们收到响应来解决这个问题。在 rdap 配置文件中,您可以设置重试机制的默认值。

您可以通过向 domain 传递额外的参数来覆盖这些默认值。

$domain = Rdap::domain(
   'google.com'
   timeoutInSecons: 10,
   retryTimes: 4,
   sleepInMillisecondsBetweenRetries: 2000,       
);

获取各种日期

DomainResponse 的实例上,您可以调用各种方法来获取各种日期。所有这些方法都返回一个 Carbon\Carbon 的实例。

$domain->registrationDate();
$domain->expirationDate();
$domain->lastChangedDate();
$domain->lastUpdateOfRdapDb();

获取所有域名属性

您可以使用 all() 获取 DomainResponse 的所有属性。

$properties = $domain->all(); // returns an array

要了解哪些属性被返回,请查看 此包含 google.com 响应的 json

获取特定域名属性

使用 get() 获取特定的域名属性。

$domain->get('objectClassName'); // returns 'domain'

您可以使用点表示法深入访问属性。

$domain->get('links.0.value'); // returns 'https://rdap.verisign.com/com/v1/domain/GOOGLE.COM'

检查域名是否具有特定状态

您可以使用 hasStatus 方法检查域名是否具有特定状态,例如 "client transfer prohibited"。

use Spatie\Rdap\Enums\DomainStatus;

$domain->hasStatus(DomainStatus::ClientTransferProhibited); // returns a boolean

检查域名是否受 Rdap 支持

您可以使用 domainIsSupported 检查 Rdap 是否有关于您的域的信息

use Spatie\Rdap\Facades\Rdap;

Rdap::domainIsSupported('freek.dev'); // returns true;
Rdap::domainIsSupported('spatie.be'); // returns false because 'be' isn't currently a supported tld;
use Spatie\Rdap\Facades\Rdap;

$domain = Rdap::domain('google.com'); // returns an instance of `Spatie\Rdap\Responses\DomainResponse`

如果您传递一个不存在的域名,则 domain() 函数将返回 null

处理错误

有时 RDAP 响应较慢。如果响应没有及时返回,将抛出 Spatie\Rdap\Exceptions\RdapRequestTimedOut 异常。

有时 RDAP 服务器返回无效的响应。如果发生这种情况,将抛出 Spatie\Rdap\Exceptions\InvalidRdapResponse 异常。

这两个异常都实现了 Spatie\Rdap\Exceptions\RdapException。您可以捕获该异常以处理这两种情况。

与 RDAP DNS 一起工作

对于每个顶级域名(TLD),都使用一个特定的服务器来响应用户的域名查询。这样的服务器被称为“DNS服务器”。所有RDAP DNS服务器的官方列表以JSON格式提供,链接如下:这里

Spatie\Rdap\RdapDns类可以从中检索信息。由于上述所有域名方法都需要搜索适当的DNS服务器,因此我们缓存了可用的DNS服务器列表。默认情况下,响应将被缓存一周。您可以在rdap配置文件中配置此缓存周期。

您可以通过此dns函数获取关于Rdap DNS的信息。

$rdapDns = Spatie\Rdap\Facades\Rdap::dns();

获取DNS服务器URL

要获取特定域名的DNS服务器URL,请调用getServerForDomain

$rdapDns->getServerForDomain('google.com'); // returns "https://rdap.verisign.com/com/v1/"

或者,您可以使用getServerForTld并传递一个TLD。

$rdapDns->getServerForTld('com'); // returns "https://rdap.verisign.com/com/v1/"

如果您传递了一个不受支持的域名或TLD,上述方法将返回null

获取所有受支持的TLDs

要获取所有受支持的TLDs列表,请调用supportedTlds

$rdapDns->supportedTlds(); // returns an array with all supported TLDs

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅我们的安全策略

鸣谢

许可协议

MIT许可(MIT)。有关更多信息,请参阅许可文件