Google-DNS

 view release on metacpan or  search on metacpan

lib/Google/DNS.pm  view on Meta::CPAN

use strict;
use warnings;
use Carp qw/croak/;
use URI::Escape qw/uri_escape/;
use HTTP::Tiny;
use JSON::PP qw/decode_json/;
use Class::Accessor::Lite (
    rw => [qw/
        cd
        type
        endpoint
        ua
    /],
);

our $VERSION = '0.02';

sub new {
    my $class = shift;
    my %args  = @_;

    bless {
        cd       => ($args{cd} || $args{dnssec}) ? 1 : 0,
        type     => $args{type}     || '',
        endpoint => $args{endpoint} || 'https://dns.google.com/resolve',
        ua       => $args{ua}       || HTTP::Tiny->new,
    }, $class;
}

sub resolve {
    my ($self, $domain, $raw) = @_;

    croak "require domain" unless $domain;

    my %query = (name => $domain);
    if ($self->cd) {
        $query{cd} = $self->cd;
    }
    if ($self->type) {
        $query{type} = $self->type;
    }
    my $query_string = join('&', map { uri_escape($_).'='.uri_escape($query{$_}) } keys %query);

    my $res = $self->ua->get($self->endpoint.'?'. $query_string);
    croak "wrong response:$res->{status} $res->{reason}" unless $res->{success};
    my $json = $res->{content};
    return $json if $raw;
    return decode_json($json);
}

sub data {
    my ($self, $domain, $delimi) = @_;

    unless (defined $delimi) {



( run in 0.797 second using v1.01-cache-2.11-cpan-2b1a40005be )