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サポートを有効にするにはどうすればよいですか?
  • A「prefer-IPv4-over-IPv6」( vs AAAA。)/「prefer-IPv6-over-IPv4」(AAAAvs 。)のLWPの設定を構成するにはどうすればよいAですか?
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 net モジュールを使用するには、モジュールを変更する必要があると思います。デフォルトでは、これは有効になっていません: 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 に答える