目次

関連ページ

URLの操作

URLからフラグメントを削除する

Tips

Net::HTTPでリクエスト

  • 以下のような感じで。
    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)が表示される

  • 上記コードでエラーが発生する場合、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でリクエスト

  • 以下のように使用できる
    require 'open-uri'
    
    url = ARGV.shift || 'http://www.srcw.net/'
    
    #ブロック内部で読み込む
    open(url) do |f| 
      puts f.read 
    end
    
    #openの戻り値を生かして読み込む
    puts open(url).read
    

URIエンコード・デコードする

エンコード

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"

デコード

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認証でアクセスする


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-17 (水) 15:21:57 (243d)