随分前の話しになりますが、PerlからProxy経由でHTTP/HTTPSなページへアクセスする必要が生じたので以下のようなスクリプトを組んでいたのですが、実行環境のActivePerlを数年ぶりにアップデートして最新の5.20系に変えたところ動かなくなってしまいました。
use strict;
use utf8;
use LWP::UserAgent;
use URI::URL;
use constant
{
HTTP_PROXY => 'http://111.222.333.444:8080',
HTTPS_PROXY => 'http://111.222.333.444:8080',
};
if (HTTPS_PROXY) {
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
$ENV{HTTPS_PROXY} = HTTPS_PROXY;
}
my $ua = LWP::UserAgent->new;
$ua->proxy('http', HTTP_PROXY) if (HTTP_PROXY);
my $url = new URI::URL('https://example.com/');
my $response = $ua->get($url);
if ($response->is_success) {
print $response->content;
}
「コンピュータに perl516.dll がないため、プログラムを開始できません。」云々のダイアログが表示されてしまい、エラーハンドリングでも拾いきれないので慌てて調べたところLWPまわりでSSLに絡む実装が変わったことが原因の模様。
このため以下のように修正して無事に動作することを確認。
use strict;
use utf8;
use LWP::UserAgent;
use URI::URL;
use constant
{
HTTP_PROXY => 'http://111.222.333.444:8080',
HTTPS_PROXY => 'http://111.222.333.444:8080',
};
my $ua = LWP::UserAgent->new;
$ua->proxy('http', HTTP_PROXY) if (HTTP_PROXY);
$ua->proxy('https', HTTPS_PROXY) if (HTTPS_PROXY);
my $url = new URI::URL('https://example.com/');
my $response = $ua->get($url);
if ($response->is_success) {
print $response->content;
}
やれやれ。