juanparati / rdap-lib
PHP RDAP 客户端库
2.1
2021-06-22 12:04 UTC
Requires
- php: >=7.4
- ext-json: *
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.3
- phpunit/phpunit: ~9.0
README
RDAPLib
关于
RDAPLib 是一个注册数据访问协议 (RDAP) 客户端库,可以查询并将结果转换为模型、数组或标准对象 (stdObject)。
此库使用 Guzzle 作为默认 HTTP 客户端,但也可以注入符合 PSR-18 的任何自定义 HTTP 客户端。
安装
composer require juanparati/rdap-lib "^2.0"
如果您不想注入符合 PSR-18 的客户端,则可能还需要 Guzzle 7。
composer require guzzlehttp/guzzle "^7.0.1"
用法
基本示例
$rdap = new \Juanparati\RDAPLib\RDAPClient();
$ip = $rdap->ipLookup('94.234.38.5');
$domain = $rdap->domainLookup('google.com');
$tld = $rdap->tldLookup('io');
$entity = $rdap->entityLookup('APL7-ARIN')
$as = $rdap->asLookup(1);
$registrar = $rdap->registrarLookup(1);
输出格式
RDAPClient 将结果映射到模型,但也可以使用以下类型返回结果
- RAW_OUTPUT (JSON 字符串)
- ARRAY_OUTPUT (嵌套数组)
- OBJECT_OUTPUT (stdClass)
- MODEL_OUTPUT
"lookups" 方法接受一个次要参数,用于指定格式。
示例
$rdap = new \Juanparati\RDAPLib\RDAPClient();
$ip = $rdap->ipLookup('94.234.38.5', \Juanparati\RDAPLib\RDAPClient\RAW_OUTPUT);
$domain = $rdap->domainLookup('google.com', \Juanparati\RDAPLib\RDAPClient\ARRAY_OUTPUT);
$tld = $rdap->tldLookup('io', \Juanparati\RDAPLib\RDAPClient\OBJECT_OUTPUT);
$entity = $rdap->entityLookup('APL7-ARIN') // Default output is MODEL_OUTPUT
模型格式
模型格式适用于需要数据访问器或额外参数的情况。RDAPClient 提供了默认模型,这些模型可以被替换。这些模型基于 RFC-7483。
例如,"vcardArray" 的默认方法提供了一个可以解析 jCard 格式的函数。
示例
$rdap = new \Juanparati\RDAPLib\RDAPClient();
$domain = $rdap->domainLookup('google.com');
$contact = $rdap->entities[0]->vcardArray->parseCard();
链接模型有另一个可以生成 HTML 链接的方法
$rdap = new \Juanparati\RDAPLib\RDAPClient();
$domain = $rdap->domainLookup('google.com');
echo $rdap->links[0]->asLink();
您可以将当前模型替换为自定义模型。为了实现这一点,需要一个自定义的 ModelMapper。
示例
// 1. Define our custom model that extends the default one.
class MyIpAddressModel extends \Juanparati\RDAPLib\Models\IpAddressModel {
/**
* Our new method
*/
public function getFirstIpV4Ip() : ?string {
return $this->v4[0] ?? null;
}
}
// 2. Instantiate a custom mapper with the model replacement.
$mapper = new \Juanparati\RDAPLib\ModelMapper([
'ipAddresses' => \Juanparati\RDAPLib\Models\IpAddressModel::class,
]);
// 3. Instantiate the client injecting our custom mapper
$rdap = new \Juanparati\RDAPLib\RDAPClient([], null, null, $mapper);
使用不同的端点
默认情况下,RDAPLib 根据查找类型使用以下端点
'ip' => 'https://rdap.db.ripe.net/ip/',
'domain' => 'https://rdap.org/domain/',
'tld' => 'https://root.rdap.org/domain/',
'autnum' => 'https://rdap.db.ripe.net/autnum/',
'entity' => 'https://rdap.arin.net/registry/entity/',
'registrar' => 'https://registrars.rdap.org/entity/',
可以通过将新的端点传递给 RDAPClient 构造函数的第一个参数来替换端点。
示例
$rdap = new \Juanparati\RDAPLib\RDAPClient(['ip' => 'https://rdap.org/ip/']);
使用自定义 HTTP 客户端
RDAPLib 允许注入符合 PSR-18 的自定义 HTTP 客户端。客户端还需要一个消息接口 PSR-7。
示例
$rdap = new \Juanparati\RDAPLib\RDAPClient(
[],
$myCompatiblePSR18HTTPClient, // Psr\Http\Client\ClientInterface
$myCompatiblePSR7MessageInterface // Psr\Http\Message\RequestFactoryInterface
);