certunlp/rdap-client
Laravel-friendly RDAP client for querying domain, IP, and ASN registration data from RDAP servers. Provides simple APIs to fetch and parse RDAP responses, helping you integrate WHOIS-style lookups into PHP apps with minimal setup.
composer require certunlp/rdap-client
use Certunlp\RdapClient\Client;
$client = new Client();
$response = $client->domain('example.com');
$domainName = $response->get('domainName');
$entities = $response->get('entities');
$client = new Client();
$response = $client->domain('laravel.com');
if ($response->isSuccess()) {
$registrar = $response->get('entities.0.roles.0'); // e.g., "registrar"
$events = $response->get('events'); // Creation/last update timestamps
} else {
// Handle errors (e.g., rate limits, invalid queries)
$error = $response->getError();
}
setEndpoint().$response->get('path.to.field') or $response->all() for raw data.config/app.php for dependency injection.// Configure client with custom timeout
$client = new Client(['timeout' => 5]);
$response = $client->network('8.8.8.8/32');
// Process entities (e.g., abuse contacts)
foreach ($response->get('entities') as $entity) {
if (in_array('abuse', $entity->roles)) {
$abuseEmail = $entity->vcard[0]->email;
}
}
try {
$response = $client->asn(15169); // Google's ASN
$asnData = $response->get('asn');
$startDate = $response->get('startDate');
} catch (\Certunlp\RdapClient\Exception\RdapException $e) {
// Log or retry (e.g., for rate limits)
Log::error("RDAP lookup failed: " . $e->getMessage());
}
// app/Providers/AppServiceProvider.php
public function register()
{
$this->app->singleton(Client::class, function ($app) {
return new Client(config('rdap.endpoints'));
});
}
$cacheKey = "rdap_domain_{$domain}";
$response = Cache::remember($cacheKey, now()->addHours(1), function () use ($client, $domain) {
return $client->domain($domain);
});
$domains = ['example.com', 'laravel.com'];
$results = collect($domains)->map(fn ($domain) => $client->domain($domain));
entities with abuse role.events for expirationDate.asn and entities for autonomous system details.$client->setRetryDelay(2); // Retry after 2 seconds on failure
if (!$response->isSuccess()) {
$client->setEndpoint('https://rdap.arin.net'); // Fallback to ARIN
}
entities.0.vcard.0.email) may require careful handling. Use get() with dot notation:
$email = $response->get('entities.*.vcard.*.email'); // Returns all emails
$client = new Client(['debug' => true]);
$rawResponse = $response->getRawResponse();
404 Not Found: Invalid query (e.g., non-existent domain/IP).429 Too Many Requests: Hit rate limits; implement retries.Certunlp\RdapClient\Response:
class CustomResponse extends \Certunlp\RdapClient\Response {
public function getRegistrar() {
return $this->get('entities.*.roles.0') === 'registrar';
}
}
$client->setHeaders(['User-Agent' => 'MyApp/1.0']);
$client = new Client(['proxy' => 'http://proxy.example.com:8080']);
https://rdap.arin.net) if none is set.$client = new Client(['timeout' => 30]);
$client = new Client(['verify_ssl' => false]);
// app/Console/Commands/LookupDomain.php
public function handle() {
$domain = $this->argument('domain');
$response = app(Client::class)->domain($domain);
$this->info($response->get('domainName'));
}
LookupDomainJob::dispatch('example.com')->onQueue('rdap');
$start = microtime(true);
$response = $client->domain('example.com');
Log::info("RDAP lookup took " . (microtime(true) - $start) . "s");
How can I help you explore Laravel packages today?