httpsでMechanizeを使う
※環境はWindows、ruby1.9.3、mechanize-2.3です。
Mechanizeはrubyでスクレイピングするとしたら、もう定番と言ってもいいライブラリでしょう。普通に使う分には色々記事が既にあるのでここではhttpsではまった部分をちょっとだけ書いてみます。
デフォルトでは https で接続すると
とエラーが出ます。証明書の検証に失敗しました、ということのようです。なのでとり得る方法は2つ。
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
■1. 証明書を検証しないでスクレイピングする方法
検証方法を verify_mode にセットする。
検証しない場合は
とすればOK。
require "mechanize"
browser = Mechanize.new
browser.verify_mode = OpenSSL::SSL::VERIFY_NONE
browser.get("https://...")
他の定数はこちらを参照。
■2. 認証局の証明書を指定する
これは少し面倒なのだが、先にブラウザから認証局の証明書をエクスポートしておく必要がある。
例えばFireFoxだと、スクレイピング対象となるhttpsのサイトに接続して、「ツール」→「ページ情報」→「セキュリティ」→「証明書を表示」をクリックすると、証明書ビューアが表示される。
そこで対象のサイトの一番上の階層にある認証局(CA)をクリックして「エクスポート」ボタンを押して適当に保存する(C:/ca.crtとする)。
ここまでが前準備で、これが終われば
とすればアクセスできるはず。
require "mechanize"
browser = Mechanize.new
browser.ca_file = "C:/ca.crt"
browser.get("https://...")
(証明書によってはアクセスできない場合がある。詳しくはよくわからない・・。VeriSign Class 3 Public Primary Certification Authority - G5 がルート証明書の場合にうまくいかないようだ)
ちなみにmechanize内部では net/http を使用しているようですので、最悪自分の思うとおり動かなければ
とすればなんでもできます。
browser = Mechanize.new
browser.agent.http = ...