というわけで、実際にIPv6を(改めて)はじめてみたら、意外な大御所が未対応だということが判明。それがLWP。
Crypt::SSLeayかIO::Socket::SSLを入れればSSL対応になるように、IO::Socket::INET6を入れればIPv6対応になるかと思えば、そうは問屋がおろしませんでした><
#!/usr/local/bin/perl use strict; use warnings; use LWP::UserAgent; my $uri = shift || die "$0 [url]"; my $res = LWP::UserAgent->new->get($uri); print $res->status_line, "\n";
% perl lwp-ipv4.pl http://ipv6.google.com/ 500 Can't connect to ipv6.google.com:80 (Bad hostname 'ipv6.google.com')
しかし、対応も簡単で、これだけでIPv6対応になります。
#!/usr/local/bin/perl
use strict;
use warnings;
BEGIN {
no warnings 'once';
require IO::Socket::INET6;
$Net::HTTP::SOCKET_CLASS = 'IO::Socket::INET6';
}
use LWP::UserAgent;
my $uri = shift || die "$0 [url]";
my $res = LWP::UserAgent->new->get($uri);
print $res->status_line, "\n";
% perl lwp-ipv6.pl http://ipv6.google.com/ 200 OK
以下は、作者に送ったPatchです。とりあえずこれでなおるのはHTTPだけですが、ほとんどこれで事足りると思います。
Dan the (IPv6|Perl) Monger
diff -ruN libwww-perl-5.825/lib/Net/HTTP.pm libwww-perl-5.825-ipv6/lib/Net/HTTP.pm
--- libwww-perl-5.825/lib/Net/HTTP.pm 2008-11-26 05:07:09.000000000 +0900
+++ libwww-perl-5.825-ipv6/lib/Net/HTTP.pm 2009-03-08 23:00:39.000000000 +0900
@@ -5,8 +5,11 @@
$VERSION = "5.819";
unless ($SOCKET_CLASS) {
- eval { require IO::Socket::INET } || require IO::Socket;
- $SOCKET_CLASS = "IO::Socket::INET";
+ $SOCKET_CLASS =
+ eval { require IO::Socket::INET6 } ? 'IO::Socket::INET6'
+ : eval { require IO::Socket::INET } ? 'IO::Socket::INET'
+ : eval { require IO::Socket } ? 'IO::Socket'
+ : die $@;
}
require Net::HTTP::Methods;
require Carp;
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。