関連ページ†
URLの操作†
URLからパス部分を削除する†
URLからフラグメントを削除する†
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リファレンスマニュアル"
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でリクエスト†
Digest認証でアクセスする†
トラブルシューティング†
Responseのencodingが ASCII-8BITになる†