Pergunta

O código a seguir ...

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

.. falhará com ..

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

.. se o nome do host em $ url é um único endereço IPv6 (isto é: a presença de um registro AAAA, mas não há registro A).

As minhas perguntas são:

  • Como faço para ativar o suporte IPv6 em LWP?
  • Como faço para configurar as definições do LWP para "preferem-IPv4-over-IPv6" (A vs. AAAA) / "preferem-IPv6-over-IPv4" (AAAA vs. A)?
Foi útil?

Solução

Parece que você só precisa usar Net :: INET6Glue :: INET_is_INET6 . Para citar o seu exemplo:

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

Outras dicas

Eu acredito que você vai ter que mudar o módulo para usar o módulo de rede IPv6. Por padrão, ele não tem essa habilitado: http : //eintr.blogspot.com/2009/03/bad-state-of-ipv6-in-perl.html . Eu não acredito que há algo tão simples como "preferem-ipv6"

Debian Wheezy (perl 5,14)

Bom trabalho:

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

Não funciona (1)

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

Não funciona (2) [Return: Bad hostname ]

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

Não funciona (3) [Return: Conexão recusada ]

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, se você não precisa de endereço IPv6 em http pedido, está tudo bem. : (

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top