use LWP::UserAgent; でhttpsのコンテンツをgetするのにちょっとハマったのでメモ。
 
 

必要なもの


 

  • OpenSSLのインストール
  • CPANからCrypt::SSLeayをインストール
  • CPANからMozilla::CAをインストール

 

 

OpenSSLのインストール


 
OpenSSLとは名前からだいたい想像がつく通り、ローカルマシンで動かしてるソフトウエアで暗号通信プロトコルによる通信を可能にするためのライブラリです。
 
まずOpenSSLの公式サイトに行って最新版をダウンロードします。
「Source」というメニューの中で [LATEST]とフラグがついてる「openssl-x.x.x.tar.gz」をクリックしてダウンロードします。
 
落とした圧縮ファイルの解凍〜設定〜インストールについてはこちらのブログに詳しく書いてありましたので参考にさせていただきました。
 

openssl のインストールメモ

 
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";
 

 
 
 

§1081 · Posted By · 1月 20, 2013 · Development · Tags: , , · [Print]