سؤال

الكود التالي ...

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 سجل).

أسئلتي هي:

  • كيف يمكنني تمكين دعم IPv6 في LWP؟
  • كيف يمكنني تكوين إعدادات LWP ل "أفضل-ipv4-Over-IPv6" (A ضد. AAAA) / "أفضل IPv6-Over-IPv4" (AAAA ضد. A)?
هل كانت مفيدة؟

المحلول

يبدو أنك بحاجة فقط إلى الاستخدام نت :: inet6glue :: inet_is_inet6. وبعد اقتباس مثالها:

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

نصائح أخرى

أعتقد أنه سيكون عليك تغيير الوحدة النمطية لاستخدام وحدة Net Net. بشكل افتراضي، لا يحتوي على هذا ممكن: http://eintr.blogspot.com/2009/03/bad-state-of-ipv6-in-perl.html.. وبعد لا أعتقد أن هناك شيئا بسيطا مثل "أفضل-IPv6"

ديبيان هيزي (بيرل 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);

سو، إذا كنت لا تحتاج إلى عنوان IPv6 في طلب HTTP، فلا بأس. :(

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top