2010-02-06 31 views
10

Các mã sau ...Làm cách nào để bật hỗ trợ IPv6 trong LWP?

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); 
} 

.. sẽ thất bại với ..

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

.. nếu hostname trong $ url là một IPv6 chỉ giải quyết (có nghĩa là: sự hiện diện của một AAAA hồ sơ, nhưng không có hồ sơ A).

Câu hỏi của tôi là:

  • Làm thế nào để kích hoạt tính năng hỗ trợ IPv6 trong LWP?
  • Làm cách nào để định cấu hình cài đặt LWP cho "thích IPv4-over-IPv6" (A so với AAAA)/"prefer-IPv6-over-IPv4" (AAAA so với A)?
+1

Bạn có đề cập đến hệ điều hành của mình không? Tôi không thể phát hiện ra nó.Không chắc chắn 100% nhưng nó có thể có liên quan – ziya

+0

Tôi đang chạy Linux – knorv

Trả lời

11

Có vẻ như bạn chỉ cần sử dụng Net::INET6Glue::INET_is_INET6. Để trích dẫn ví dụ của nó:

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

Cảm ơn! Net :: INET6Glue đã thực hiện thủ thuật! – knorv

1

Debian Wheezy (perl 5,14)

làm việc thoải mái:

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

Không làm việc (1)

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

Không làm việc (2) [Return: Bad hostname]

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

không làm việc (3) [Return: kết nối từ chối]

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); 

Soo, nếu bạn không cần Địa chỉ IPv6 trong http yêu cầu, nó là tốt. :(