PerlでSSL(https)のサイトのコンテンツが取得できない

空っぽが返ってくる?

LWP::Simpleget()とかでhttpsから始まるURLを取得しようとすると、エラーも何もなく、空っぽが返ってきてしまう場合があります。 これは、そもそもSSL対応のモジュールが入ってない可能性があります。

#!/usr/bin/perl --
use strict;
use LWP::Simple;
print get('https://www.google.co.jp/'); # 何も出力されない・・!

尚、get()直後にprint $@するとProtocol scheme 'https' is not supportedみたいなエラーメッセージが確認できるかもしれません。

つまり、LWP::SimpleでSSLがサポートされてない、ということです。

httpsもサポートしてよ!

基本的にサーバ側に必要モジュールをインストールすると、上記スクリプトで正常に取得できるようになります。

yum install perl-Net-SSLeay
yum install perl-Crypt-SSLeay
yum install perl-IO-Socket-SSL

または、cpanmが使える環境ならこれでもOK↓

cpanm Net::SSLeay
cpanm Crypt::SSLeay
cpanm IO::Socket::SSL

但し、yumパッケージをインストールしてもうまくいかない場合があります。これは LWP::Protocol::httpsモジュールが入っていない可能性がありますので、そういう時はcpanmとかcpanで別途インストールしてください。

cpanm LWP::Protocol::https

それでもダメっぽい!

うーん。もしかしてOpenSSLのパッケージが足りてないのかもしれません。以下yumコマンドを実行してみてください。 また、念のためアップデートしておくと吉です。

yum install openssl
yum install openssl-devel
yum update openssl*

というか、上記のopenssl-develパッケージが入っていないと、そもそもcpanmがコケるみたいです。
お試しあれ。