كيف يمكنني تمكين دعم IPv6 في LWP؟
سؤال
الكود التالي ...
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، فلا بأس. :(
لا تنتمي إلى StackOverflow