Как включить поддержку IPv6 в 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 "OKn";
} else {
    die($response->status_line);
}

.. завершится ..

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

.. если имя хоста в $url является только IPv6-адресом (то есть: наличие AAAA запись, но нет A запись).

мои вопросы:

  • Как включить поддержку IPv6 в LWP?
  • как настроить параметры LWP для "prefer-IPv4-over-IPv6" (A и AAAA) / "prefer-IPv6-over-IPv4" (AAAA и A)?

3 ответов


похоже, вам просто нужно использовать 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' );

Я считаю,что вам придется изменить модуль, чтобы использовать модуль IPv6 net. По умолчанию это не включено:http://eintr.blogspot.com/2009/03/bad-state-of-ipv6-in-perl.html. Я не верю, что есть что-то простое, как "prefer-ipv6"


Debian Wheezy (perl 5.14)

работа славная:

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

Не работает (1)

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

Не работает (2) [Return:плохое имя]

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

Не работает (3) [Return:соединение отклонено]

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, если вам не нужен IPv6-адрес в http-запросе, все в порядке. :(