¿Cómo puedo activar el soporte IPv6 en LWP?
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
)?
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. : (