Examples here assume that net/http has been required (which also requires +uri+): require 'net/http' Many code examples here use these example websites: - https://jsonplaceholder.typicode.com. - http://example.com. Some examples also assume these variables: uri = URI('https://jsonplaceholder.typicode.com') uri.freeze # Examples may not modify. hostname = uri.hostname # => "jsonplaceholder.typicode.com" port = uri.port # => 443 So that example requests may be written as: Net::HTTP.get(uri) Net::HTTP.get(hostname, '/index.html') Net::HTTP.start(hostname) do |http| http.get('/todos/1') http.get('/todos/2') end An example that needs a modified URI first duplicates +uri+, then modifies the duplicate: _uri = uri.dup _uri.path = '/todos/1'