RubyでURIを分解してみた!

URI (Uniform Resource Identifier) を分解して、個々の要素を取り出してみます。

3つのURIで試してみました。

  • HTTP用のURI
  • Fileアクセス時のURI
  • でたらめなURI

実験に使用したRubyソースです。

#! ruby -Ku
require 'uri'
print "Ruby #{RUBY_VERSION} using.\n\n"

uri = "https://user01:pass01@www.example.com:8080/aaa/index.html?var1=val
ue1;var2=value2#fff"

print "URI = ", uri, "\n"

parts = URI.split(uri)

for i in (0..parts.length-1)
    case  i
    when 0 ; print "scheme   : "
    when 1 ; print "userinfo : "
    when 2 ; print "host     : "
    when 3 ; print "port     : "
    when 4 ; print "registry : "
    when 5 ; print "path     : "
    when 6 ; print "opaque   : "
    when 7 ; print "query    : "
    when 8 ; print "fragment : "
    end

    p parts[i]
end

print "\n\n"

uri = "file:///usr/bin/perl"
print "URI = ", uri, "\n"

parts = URI.split(uri)

for i in (0..parts.length-1)
    case  i
    when 0 ; print "scheme   : "
    when 1 ; print "userinfo : "
    when 2 ; print "host     : "
    when 3 ; print "port     : "
    when 4 ; print "registry : "
    when 5 ; print "path     : "
    when 6 ; print "opaque   : "
    when 7 ; print "query    : "
    when 8 ; print "fragment : "
    end

    p parts[i]
end


print "\n\n"

uri = "http:aabbccddeeff"
print "URI = ", uri, "\n"

parts = URI.split(uri)

for i in (0..parts.length-1)
    case  i
    when 0 ; print "scheme   : "
    when 1 ; print "userinfo : "
    when 2 ; print "host     : "
    when 3 ; print "port     : "
    when 4 ; print "registry : "
    when 5 ; print "path     : "
    when 6 ; print "opaque   : "
    when 7 ; print "query    : "
    when 8 ; print "fragment : "
    end

    p parts[i]
end

 

下記が実行結果です。registoryだけは、nil になってしまい、値を入れる事ができませんでした。

どういうURIを書けば、URI.registory に値が入るの!?

 
 

Ruby 2.6.0 using.

URI = https://user01:pass01@www.example.com:8080/aaa/index.html?var1=val
ue1;var2=value2#fff
scheme   : "https"
userinfo : "user01:pass01"
host     : "www.example.com"
port     : "8080"
registry : nil
path     : "/aaa/index.html"
opaque   : nil
query    : "var1=value1;var2=value2"
fragment : "fff"


URI = file:///usr/bin/perl
scheme   : "file"
userinfo : nil
host     : nil
port     : nil
registry : nil
path     : "/usr/bin/perl"
opaque   : nil
query    : nil
fragment : nil


URI = http:aabbccddeeff
scheme   : "http"
userinfo : nil
host     : nil
port     : nil
registry : nil
path     : nil
opaque   : "aabbccddeeff"
query    : nil
fragment : nil

 はてなブログは、改行の始末に苦労するな~。(ToT)
 ---------------------------------------
ITとことんのトップページ
  ┗━ ■Rubyのトップページ
          ┗━ ■本ページ