#author("2018-03-22T14:36:40+09:00","default:wikiwriter","wikiwriter") *目次 [#b98c24f2] #contents *関連ページ [#a537bd7f] -[[Ruby]] -[[Mechanize]] *Tips [#de56f839] **Net::HTTPでリクエスト [#s70a9ca7] -以下のような感じで。 #pre{{ require 'net/http' require 'uri' require 'kconv' uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) puts "get #{uri.request_uri}" if uri.scheme == 'https' http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE end response, = http.get(uri.request_uri) # request_uri=path + '?' + query body = response.body puts body puts Kconv.guess(body) }} ***uninitialized constant OpenSSL (NameError)が表示される [#u90ff1c9] -上記コードでエラーが発生する場合、require 'net/http'をrequire 'net/https'に変更すること。 -Ruby 2.3.3までは上記コードで動いていたのだが、Ruby 2.3.4で動かなくなった。 -http.rbはopensslをautoloadしていて、https.rbはopensslを明示的にrequireしている。 -ここのところの挙動が変更になった模様(両バージョンの間でhttp.rb自体は全く同じことを確認) 。 -変更記録をみても不具合による修正なのかどうかは不明だった。 **OpenURIでリクエスト [#ofb57a33] -以下のように使用できる #pre{{ require 'open-uri' url = ARGV.shift || 'http://www.srcw.net/' #ブロック内部で読み込む open(url) do |f| puts f.read end #openの戻り値を生かして読み込む puts open(url).read }} **URIエンコード・デコードする [#ta4642c5] -[[Ruby On Rails ピチカート街道 - rubyでURLエンコード -:http://rubist.blog77.fc2.com/blog-entry-49.html]] ***エンコード [#a7a86457] #pre{{ require 'uri' p URI.escape('http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Rubyリファレンスマニュアル') => "http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Ruby%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB" }} ***デコード [#b16c4a7d] #pre{{ require 'uri' p URI.unescape('http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Ruby%A5%EA%A5%D5%A5%A1%A5%EC%A5%F3%A5%B9%A5%DE%A5%CB%A5%E5%A5%A2%A5%EB') => "http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Rubyリファレンスマニュアル" }} **Digest認証でアクセスする [#ye8ccdee] -net/httpもopen-uriも対応してないのか(?) -[[RubyForge: WWW::Mechanize: Project Info:http://rubyforge.org/projects/mechanize/]]を使うのがいいらしい…