LWP::UserAgentでHTTPSプロキシ越しに通信する - Qiita
の
## ** See https://metacpan.org/module/Net::HTTPS ## Force use of Net::SSL instead of IO::Socket::SSL $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
の部分を実施せずにうまくいっていたのだが、最近はダメっぽい。
昔のコード(perl-libwww-perl-5.833-2.el6.x86_64のNet/HTTPS.pm)だと以下のようにNet::SSL(Crypt::SSLeayに含まれる)があるとIO::Socket::SSLがあってもNet::SSLを利用していたのに
# Figure out which SSL implementation to use if ($SSL_SOCKET_CLASS) { # somebody already set it } elsif ($Net::SSL::VERSION) { $SSL_SOCKET_CLASS = "Net::SSL"; } elsif ($IO::Socket::SSL::VERSION) { $SSL_SOCKET_CLASS = "IO::Socket::SSL"; # it was already loaded } else { ... }
今のコード(perl-libwww-perl-5.833-3.el6.x86_64のNet/HTTPS.pm)だと以下のようにIO::Socket::SSLが存在すると、Net::SSLが存在していても、IO::Socket::SSLを使ってしまうようだ。
if ($SSL_SOCKET_CLASS) { # somebody already set it } elsif ($SSL_SOCKET_CLASS = $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS}) { unless ($SSL_SOCKET_CLASS =~ /^(IO::Socket::SSL|Net::SSL)\z/) { die "Bad socket class [$SSL_SOCKET_CLASS]"; } eval "require $SSL_SOCKET_CLASS"; die $@ if $@; } elsif ($IO::Socket::SSL::VERSION) { $SSL_SOCKET_CLASS = "IO::Socket::SSL"; # it was already loaded } elsif ($Net::SSL::VERSION) { $SSL_SOCKET_CLASS = "Net::SSL"; } else { ... }