spatie / laravel-rdap
在 Laravel 应用中执行 RDAP 查询
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.4
- illuminate/cache: ^10.0|^11.0
- illuminate/contracts: ^10.0|^11.0
- illuminate/http: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.11
Requires (Dev)
- larastan/larastan: ^2.0.1
- nunomaduro/collision: ^6.0|^7.0|^8.9
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.22
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- spatie/laravel-ray: ^1.29
README
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)。有关更多信息,请参阅许可文件。