Shipped LWPx::ParanoidHandler/Net::DNS::Paranoid, alternative for LWPx::ParanoidAgent!!
LWPx::ParanoidAgent is not maintained well. Known issue was added at 3 years ago, but it's not resolved https://rt.cpan.org/Public/Bug/Display.html?id=44569.
I wrote a brand new LWPx::ParanoidHandler, most of code was taken from LWPx::ParanoidAgent, but it have better interface, and it is not replaces most part of LWP::UserAgent. It' using LWP's handler API.
You can use it very easily.
use LWPx::ParanoidHandler; # ← exports make_paranoid function
my $ua = LWP::UserAgent->new();
make_paranoid($ua);
And I split a most of features from LWP. It provides Net::DNS::Paranoid module. Here is complete example.
my $dns = Net::DNS::Paranoid->new();
$dns->blocked_hosts([
'mixi.jp',
qr{\.dev\.example\.com$},
]);
$dns->whitelisted_hosts([
'twitter.com',
]);
my ($addrs, $errmsg) = $dns->resolve('mixi.jp');
if ($addrs) {
print @$addrs, $/;
} else {
die $errmsg;
}
Then, you can use this module with all of the network related modules like Furl, Net::*, etc...
e.g. You can set the inet_aton arguments to use Net::DNS::Paranoid with Furl.
use Furl::HTTP;
use Net::DNS::Paranoid;
my $resolver = Net::DNS::Paranoid->new();
my $furl = Furl->new(
inet_aton => sub {
my ($host, $errmsg) = $resolver->resolve($_[0], time(), $_[1]);
die $errmsg unless $host;
Socket::inet_aton($host->[0]);
}
);
{
my $res = $furl->get('http://example.com/');
say $res->status_line;
}
{
my $res = $furl->get('http://127.0.0.1/');
say $res->status_line;
}
Enjoy!
Published: 2012-09-14(Fri) 23:49