The URI library splits a web address into scheme, host, path, and query parts.

uri parse `URI.parse` turns an address string into a structured object without opening a network connection.

URI Parts

raw_url
uri_parts.rb
Replay: real traced execution (multi-file project)
require "uri"

raw_url = "https://example.com/books/42?format=json"
uri = URI.parse(raw_url)

scheme = uri.scheme
host = uri.host
path = uri.path
query = uri.query || "none"

puts "scheme=#{scheme}"
puts "host=#{host}"
puts "path=#{path}"
puts "query=#{query}"
require "uri"

raw_url = "http://localhost:8080/status?debug=true"
uri = URI.parse(raw_url)

scheme = uri.scheme
host = uri.host
path = uri.path
query = uri.query || "none"

puts "scheme=#{scheme}"
puts "host=#{host}"
puts "path=#{path}"
puts "query=#{query}"
require "uri"

raw_url = "https://docs.ruby-lang.org/en/master/"
uri = URI.parse(raw_url)

scheme = uri.scheme
host = uri.host
path = uri.path
query = uri.query || "none"

puts "scheme=#{scheme}"
puts "host=#{host}"
puts "path=#{path}"
puts "query=#{query}"
  1. raw_url ← https://example.com/books/42?format=json, uri ← https://example.com/books/42?format=json

    1require "uri"23raw_url→ https://example.com/books/42?format=json = "https://example.com/books/42?format=json"  #@raw_url="http://localhost:8080/status?debug=true", "https://docs.ruby-lang.org/en/master/"4uri→ https://example.com/books/42?format=json = URI.parse(raw_url)https://example.com/books/42?format=json56scheme→ https = uri.schemehttps7host→ example.com = uri.hostexample.com8path→ /books/42 = uri.path/books/429query→ format=json = uri.queryformat=json || "none"1011puts "scheme=#{schemehttps}"12puts "host=#{hostexample.com}"13puts "path=#{path/books/42}"14puts "query=#{queryformat=json}"
    outputscheme=https
    host=example.com
    path=/books/42
    query=format=json
  1. raw_url ← http://localhost:8080/status?debug=true, uri ← http://localhost:8080/status?debug=true

    1require "uri"23raw_url→ http://localhost:8080/status?debug=true = "http://localhost:8080/status?debug=true"4uri→ http://localhost:8080/status?debug=true = URI.parse(raw_url)http://localhost:8080/status?debug=true56scheme→ http = uri.schemehttp7host→ localhost = uri.hostlocalhost8path→ /status = uri.path/status9query→ debug=true = uri.querydebug=true || "none"1011puts "scheme=#{schemehttp}"12puts "host=#{hostlocalhost}"13puts "path=#{path/status}"14puts "query=#{querydebug=true}"
    outputscheme=http
    host=localhost
    path=/status
    query=debug=true
  1. raw_url ← https://docs.ruby-lang.org/en/master/, uri ← https://docs.ruby-lang.org/en/master/

    1require "uri"23raw_url→ https://docs.ruby-lang.org/en/master/ = "https://docs.ruby-lang.org/en/master/"4uri→ https://docs.ruby-lang.org/en/master/ = URI.parse(raw_url)https://docs.ruby-lang.org/en/master/56scheme→ https = uri.schemehttps7host→ docs.ruby-lang.org = uri.hostdocs.ruby-lang.org8path→ /en/master/ = uri.path/en/master/9query→ none = uri.query(empty) || "none"1011puts "scheme=#{schemehttps}"12puts "host=#{hostdocs.ruby-lang.org}"13puts "path=#{path/en/master/}"14puts "query=#{querynone}"
    outputscheme=https
    host=docs.ruby-lang.org
    path=/en/master/
    query=none