時計を壊せ

駆け出してからそこそこ経ったWebプログラマーの雑記

LWP::Protocol::Hostsが話題になってたので

Socket::inet_atonをoverrideするとLWPに特化せずにより汎用的になるのではと思って、
それらしきものを書いてみた。
ただし、Socket::inet_atonがexportされる前にuseしなければいけないので、
実用性はあまり高くなさげ。

https://github.com/karupanerura/p5-Net-DNS-Hosts

以下のコードは$scopeが生きている間、Socket::inet_atonをoverrideしてwww.cpan.orgの向き先を127.0.0.1に変えている。

use Net::DNS::Hosts;
use LWP::UserAgent;

my $scope = Net::DNS::Hosts->scope(
    'www.cpan.org' => '127.0.0.1'
);

# override request hosts with peer addr defined above
my $ua = LWP::UserAgent->new;
my $res = $ua->get("http://www.cpan.org/");
print $res->content; # is same as "http://127.0.0.1/" content