2010-02-06 113 views
10

下面的代碼...如何在LWP中啓用IPv6支持?

my $user_agent = LWP::UserAgent->new; 
my $request = HTTP::Request->new(GET => $url); 
my $response = $user_agent->request($request); 
if ($response->is_success) { 
    print "OK\n"; 
} else { 
    die($response->status_line); 
} 

..將會失敗..

500 Can't connect to <hostname> (Bad hostname '<hostname>') 

..如果在$ URL的主機名是IPv6只是解決(即:一個AAAA的存在記錄,但沒有A記錄)。

我的問題是:

  • 如何啓用LWP IPv6支持?
  • 如何爲「prefer-IPv4-over-IPv6」(AAAAA)/「prefer-IPv6-over-IPv4」(AAAAA)配置LWP的設置?
+1

你提到了你的操作系統嗎?我找不到它。不是100%肯定,但它可能是相關的 – ziya 2010-02-06 23:04:07

+0

我正在運行Linux – knorv 2010-02-06 23:46:39

回答

11

看起來你只需要使用Net::INET6Glue::INET_is_INET6。引用該例如:

use Net::INET6Glue::INET_is_INET6; 
use LWP::Simple; 
print get('http://[::1]:80'); 
print get('http://ipv6.google.com'); 
+0

謝謝!Net :: INET6Glue做到了! – knorv 2010-02-08 23:08:30

1

Debian的喘息(perl的5.14)

工作很好:

use LWP::Simple; 
print get('http://ip6-localhost:80'); 

不工作(1)

use LWP::Simple; 
print get('http://[::1]:80'); 

不工作(2)[返回:主機名錯誤]

use LWP::Simple; 
$ua = new LWP::UserAgent(); 
my $req = new HTTP::Request("GET", "http://[::1]/"); 
my $res = $ua->request($req); 

不工作(3)[返回:連接被拒絕]

use Net::INET6Glue::INET_is_INET6; 
use LWP::Simple; 
$ua = new LWP::UserAgent(); 
my $req = new HTTP::Request("GET", "http://[::1]/"); 
my $res = $ua->request($req); 

秀,如果你不需要http請求中的IPv6地址,沒關係。 :(