use LWP::UserAgent; でhttpsのコンテンツをgetするのにちょっとハマったのでメモ。
必要なもの
- OpenSSLのインストール
- CPANからCrypt::SSLeayをインストール
- CPANからMozilla::CAをインストール
OpenSSLのインストール
OpenSSLとは名前からだいたい想像がつく通り、ローカルマシンで動かしてるソフトウエアで暗号通信プロトコルによる通信を可能にするためのライブラリです。
まずOpenSSLの公式サイトに行って最新版をダウンロードします。
「Source」というメニューの中で [LATEST]とフラグがついてる「openssl-x.x.x.tar.gz」をクリックしてダウンロードします。
落とした圧縮ファイルの解凍〜設定〜インストールについてはこちらのブログに詳しく書いてありましたので参考にさせていただきました。
OpenSSLのインストール~Crypt::SSLeayのインストールはperldoc.jpにもきれいにまとまってます。
CPANからCrypt::SSLeayをインストール
次にCrypt::SSLeayというモジュールをCPANから入手します。
コマンドラインで、
$ sudo cpan $ cpan[1]>install Crypt::SSLeay
でインストール出来ます。
このCrypt::SSLeayというモジュールはスクリプトの中でuseしたりするものじゃなくて、LWPモジュールがSSL通信できるように裏で動いてくれるものです。
機能拡張のためのプラグインみたいなものですね。
CPANからMozilla::CAをインストール
OpenSSLのインストールとCrypt::SSLeayのインストールまではネットで調べればすぐに分かるのですが、ここまでの状態でスクリプトからhttpsで始まるURLのコンテンツをgetしようとすると次のような感じで怒られちゃいます。
Can’t verify SSL peers without knowning which Certificate Authorities to trust
This problem can be fixed by either setting the PERL_LWP_SSL_CA_FILE
envirionment variable or by installing the Mozilla::CA module.
To disable verification of SSL peers set the PERL_LWP_SSL_VERIFY_HOSTNAME
envirionment variable to 0. If you do this you can’t be sure that you
communicate with the expected peer.
なので、ここはおっしゃる通りにMozilla::CAというモジュールをCPANからインストールします。
$ sudo cpan $ cpan[1]>install Mozilla::CA
これでめでたく下記のようなスクリプトでhttpsのコンテンツをgetすることができます。
#! /usr/bin/perl use warnings; use strict; use autodie; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); my $url = 'https://....'; my $res = $ua->get($url); print $res->content, "\n";