10

以下代码...

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记录)。

我的问题是:

  • 如何在 LWP 中启用 IPv6 支持?
  • 如何为“prefer-IPv4-over-IPv6”(Avs. AAAA)/“prefer-IPv6-over-IPv4”(AAAAvs. A)配置 LWP 的设置?
4

3 回答 3

12

看起来您只需要使用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' );
于 2010-02-06T23:46:06.087 回答
2

我相信您必须更改模块才能使用 IPV6 网络模块。默认情况下,它没有启用此功能:http ://eintr.blogspot.com/2009/03/bad-state-of-ipv6-in-perl.html 。我不相信有像“prefer-ipv6”这样简单的东西

于 2010-02-06T23:41:28.963 回答
1

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

所以,如果您在 http 请求中不需要 IPv6 地址,那很好。:(

于 2012-06-18T07:01:53.497 回答