【问题标题】:How do I enable IPv6 support in LWP?如何在 LWP 中启用 IPv6 支持?
【发布时间】:2011-01-13 23:25:58
【问题描述】:

以下代码...

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 支持?
  • 如何配置 LWP 的“prefer-IPv4-over-IPv6”(AAAAA)/“prefer-IPv6-over-IPv4”(AAAAA)设置?

【问题讨论】:

  • 你提到你的操作系统了吗?我无法发现它。不是 100% 肯定,但它可能是相关的。

标签: perl ipv6 lwp


【解决方案1】:

看起来您只需要使用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】:

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

    【讨论】:

      【解决方案3】:

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

      Soo,如果您在 http 请求中不需要 IPv6 地址,那也没关系。 :(

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 2013-04-27
        相关资源
        最近更新 更多