k01ken’s b10g

He110 W0r1d!

Rubyを用いてhttpsプロトコルでサイトからデータを取得する際の注意点

開発環境はWindows7 Professional(32bit) + ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]。

httpsプロトコルYouTubeのとあるページから、データを取得して、そのデータをsampletest.txtとして保存するプログラムを作りたいと思います。

require 'open-uri'

result = ""
open('https://www.youtube.com/watch?v=k3KqqOlJKsQ'){|f|
	f.each_line{|line|
		result += line
	}
}

File.open('sampletest.txt','w'){|f|
	f.puts(result)
}

これで実行すると、certificate verify failed (OpenSSL::SSL::SSLError)のようなエラーが出現するので、以下のように修正、

require 'open-uri'
require 'openssl'

result = ""
open('https://www.youtube.com/watch?v=k3KqqOlJKsQ', :ssl_verify_mode =>
OpenSSL::SSL::VERIFY_NONE){|f|
	f.each_line{|line|
		result += line
	}
}

File.open('sampletest.txt','w'){|f|
	f.puts(result)
}

いくつか方法はあるようですが、今回は証明書を検証しない方法を取っています。
これで問題なくページを保存できています。

参考リンク
library open-uri (Ruby 2.5.0)
[Ruby] open-uri の HTTPS リクエストで certificate verify failed | mofu犬blog
Rubyでファイルの書き込み・読み込みを行う方法 | UX MILK