diff --git a/lib/net/http.rb b/lib/net/http.rb index 0fec32bb84..90f299f705 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -1612,11 +1612,10 @@ module Net #:nodoc: private def addr_port - if use_ssl? - address() + (port == HTTP.https_default_port ? '' : ":#{port()}") - else - address() + (port == HTTP.http_default_port ? '' : ":#{port()}") - end + addr = address + addr = "[#{addr}]" if addr.include?(":") + default_port = use_ssl? ? HTTP.https_default_port : HTTP.http_default_port + default_port == port ? addr : "#{addr}:#{port}" end def D(msg) diff --git a/test/net/http/test_http.rb b/test/net/http/test_http.rb index c5a77d3695..d3c2aecb9f 100644 --- a/test/net/http/test_http.rb +++ b/test/net/http/test_http.rb @@ -59,6 +59,33 @@ class TestNetHTTP < Test::Unit::TestCase end end + def test_addr_port + http = Net::HTTP.new 'hostname.example', nil, nil + addr_port = http.__send__ :addr_port + assert_equal 'hostname.example', addr_port + + http.use_ssl = true + addr_port = http.__send__ :addr_port + assert_equal 'hostname.example:80', addr_port + + http = Net::HTTP.new '203.0.113.1', nil, nil + addr_port = http.__send__ :addr_port + assert_equal '203.0.113.1', addr_port + + http.use_ssl = true + addr_port = http.__send__ :addr_port + assert_equal '203.0.113.1:80', addr_port + + http = Net::HTTP.new '2001:db8::1', nil, nil + addr_port = http.__send__ :addr_port + assert_equal '[2001:db8::1]', addr_port + + http.use_ssl = true + addr_port = http.__send__ :addr_port + assert_equal '[2001:db8::1]:80', addr_port + + end + def test_edit_path http = Net::HTTP.new 'hostname.example', nil, nil