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!