LWP::UserAgentでHTTPS接続できない問題を解決


PerlのLWP::UserAgentでホームページにアクセスしてHTMLを取得するというプログラムを書いていたのですが、HTTPS(SSL)のページにアクセスしようとすると、エラーが出てうまくいかないという問題に直面してしまいました。


その時に書いていたプログラムがこんな感じです。
my $url = "https://xxx.yyy.jp";
my $request = HTTP::Request->new(GET => $url);
my $ua = LWP::UserAgent->new;
my $res = $ua->request($request);
my $result = $res->content;

ごく普通に、URLを指定して、LWP::UserAgentでアクセスするというものです。
HTTPのページは問題ないのですが、HTTPSだと失敗するんですね。


これを実行しようとしたら、Crypt::SSLeayもしくはIO::Socket::SSLがないとアクセスできないと怒られてしまいました。


仕方がないので、cpanからインストールしようと思って、以下のコマンドを入力します。

cpan install Crypt::SSLeay

やってみたところダメだと怒られました。もう一つの方も試してみます。

cpan install IO::Socket::SSL

これもダメだと怒られました。

何が悪いのかよく分からず、調べていたらどうやらOpen SSLが関係しているかもしれないという記事を読んだので、試しにopenssl-develをyumで入れてみました。

yum install openssl-devel


これはすんなり入ってくれました。

で、プログラムを実行すると、今度はエラーメッセージが変わり、Net::SSLeayが必要だ、と表示されたので、次のようにNet::SSLeayをインストールしました。

cpan install Net::SSLeay


そして、これでうまくいくかと思ってプログラムを実行してみたのですが、今度はLWP::Protocol::httpsが必要だと怒られました。トラブルは続きます。

同じようにcpanからインストールしようと

cpan install LWP::Protocol::https


とやってみますが、これもまたインストールに失敗します。メッセージを読んでみると以下のような箇所があり、どうやらSSLでの接続(www.apache.org:443)に
失敗しているようです。wgetでアクセスしてみてもうまく接続できません。


# Failed test at t/apache.t line 15.

# Failed test at t/apache.t line 16.
# 'Can't connect to www.apache.org:443 (certificate
+verify failed)
#
# LWP::Protocol::https::Socket: SSL connect attempt failed with unknow
+n error error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certi
+ficate verify failed at /usr/local/Perl-5.14/lib/perl5/site_perl/5.14
+.2/LWP/Protocol/http.pm line 51.
# '


あれこれ試してみてうまくいかず、あきらめかけていた時にふと思いついたのが、ソースからインストールしようということ。


LWP::Protocol::httpsのソースをダウンロードしてきて、マニュアルでインストールしてみました。


wget http://search.cpan.org/CPAN/authors/id/M/MS/MSCHILLI/LWP-Protocol-https-6.06.tar.gz
tar xvfz LWP-Protocol-https-6.06.tar.gz
cd LWP-Protocol-https-6.06

perl Makefile.PL
make
make install


はい、すんなりインストール完了。cpanで出ていたややこしいエラーメッセージは全くでなくなりました


そして、プログラム実行です。つながるかな?と思ってリターンキーを押すと・・


やった!つながった!無事にHTMLを取得することができました


こんな感じで解決できると思います。はまっている方が結構いらっしゃるようでしたので、ご参考になりましたら幸いです。


このエントリーをはてなブックマークに追加



関連記事 

1.LinuxのPerlを最新版にアップデートするには?



▲ このページの上部へ戻る