てきとうなメモ

本の感想とか技術メモとか

LWP::UserAgentでHTTPS proxy越し通信(Cent OS 6)

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 {
    ...
}