Как включить поддержку IPv6 в LWP? - PullRequest
10 голосов
/ 07 февраля 2010

следующий код ...

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

Мои вопросы:

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

Ответы [ 3 ]

12 голосов
/ 07 февраля 2010

Похоже, вам просто нужно использовать 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' );
2 голосов
/ 07 февраля 2010

Полагаю, вам придется изменить модуль для использования сетевого модуля IPV6. По умолчанию он не включен

1 голос
/ 18 июня 2012

Debian Wheezy (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);

Так, если вам не нужен IPv6-адрес в http-запросе, это нормально. (

...