Pregunta

El siguiente código ...

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

.. fallará con ..

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

.. si el nombre de host en $ url es una única dirección IPv6 (es decir: la presencia de un registro AAAA, pero ningún registro A).

Mis preguntas son:

  • ¿Cómo activo el soporte IPv6 en LWP?
  • ¿Cómo puedo configurar los ajustes de LWP para "preferir IPv4-IPv6-over-" (vs. A AAAA) / "prefieren IPv6 sobre IPv4" (vs. AAAA A)?
¿Fue útil?

Solución

Parece que sólo tiene que utilizar Net :: :: INET6Glue INET_is_INET6 . Para citar su ejemplo:

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

Otros consejos

Creo que tendrá que cambiar el módulo de utilizar el módulo de red IPv6. Por defecto no se ha activado esto: http : //eintr.blogspot.com/2009/03/bad-state-of-ipv6-in-perl.html . No creo que hay algo tan simple como "preferir-ipv6"

Debian Wheezy (Perl 5.14)

Buen trabajo:

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

No trabajando (1)

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

No funciona (2) [Volver: Bad nombre de host ]

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

No trabajando (3) [Return: Conexión rechazada ]

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, si usted no necesita la dirección IPv6 en la solicitud http, está bien. : (

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top