* lib/uri/generic.rb (URI::Generic#hostname): new method.
(URI::Generic#hostname=): ditto. * lib/open-uri.rb: use URI#hostname * lib/net/http.rb: ditto. [ruby-core:32056] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29416 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
915ae780c3
commit
5fd45a4b79
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
Wed Oct 6 12:28:22 2010 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* lib/uri/generic.rb (URI::Generic#hostname): new method.
|
||||||
|
(URI::Generic#hostname=): ditto.
|
||||||
|
|
||||||
|
* lib/open-uri.rb: use URI#hostname
|
||||||
|
|
||||||
|
* lib/net/http.rb: ditto.
|
||||||
|
|
||||||
|
[ruby-core:32056]
|
||||||
|
|
||||||
Wed Oct 6 11:52:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Wed Oct 6 11:52:12 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* io.c (fptr_finalize): write_mutex might have been destroyed
|
* io.c (fptr_finalize): write_mutex might have been destroyed
|
||||||
|
@ -64,7 +64,7 @@ module Net #:nodoc:
|
|||||||
# require 'uri'
|
# require 'uri'
|
||||||
#
|
#
|
||||||
# url = URI.parse('http://www.example.com/index.html')
|
# url = URI.parse('http://www.example.com/index.html')
|
||||||
# res = Net::HTTP.start(url.host, url.port) {|http|
|
# res = Net::HTTP.start(url.hostname, url.port) {|http|
|
||||||
# http.get('/index.html')
|
# http.get('/index.html')
|
||||||
# }
|
# }
|
||||||
# puts res.body
|
# puts res.body
|
||||||
@ -75,7 +75,7 @@ module Net #:nodoc:
|
|||||||
#
|
#
|
||||||
# url = URI.parse('http://www.example.com/index.html')
|
# url = URI.parse('http://www.example.com/index.html')
|
||||||
# req = Net::HTTP::Get.new(url.path)
|
# req = Net::HTTP::Get.new(url.path)
|
||||||
# res = Net::HTTP.start(url.host, url.port) {|http|
|
# res = Net::HTTP.start(url.hostname, url.port) {|http|
|
||||||
# http.request(req)
|
# http.request(req)
|
||||||
# }
|
# }
|
||||||
# puts res.body
|
# puts res.body
|
||||||
@ -101,7 +101,7 @@ module Net #:nodoc:
|
|||||||
# req = Net::HTTP::Post.new(url.path)
|
# req = Net::HTTP::Post.new(url.path)
|
||||||
# req.basic_auth 'jack', 'pass'
|
# req.basic_auth 'jack', 'pass'
|
||||||
# req.set_form_data({'from' => '2005-01-01', 'to' => '2005-03-31'}, ';')
|
# req.set_form_data({'from' => '2005-01-01', 'to' => '2005-03-31'}, ';')
|
||||||
# res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
|
# res = Net::HTTP.new(url.hostname, url.port).start {|http| http.request(req) }
|
||||||
# case res
|
# case res
|
||||||
# when Net::HTTPSuccess, Net::HTTPRedirection
|
# when Net::HTTPSuccess, Net::HTTPRedirection
|
||||||
# # OK
|
# # OK
|
||||||
@ -390,7 +390,7 @@ module Net #:nodoc:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
uri = uri_or_host
|
uri = uri_or_host
|
||||||
new(uri.host, uri.port).start {|http|
|
new(uri.hostname, uri.port).start {|http|
|
||||||
return http.request_get(uri.request_uri, &block)
|
return http.request_get(uri.request_uri, &block)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
@ -415,7 +415,7 @@ module Net #:nodoc:
|
|||||||
req = Post.new(url.path)
|
req = Post.new(url.path)
|
||||||
req.form_data = params
|
req.form_data = params
|
||||||
req.basic_auth url.user, url.password if url.user
|
req.basic_auth url.user, url.password if url.user
|
||||||
new(url.host, url.port).start {|http|
|
new(url.hostname, url.port).start {|http|
|
||||||
http.request(req)
|
http.request(req)
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -263,17 +263,17 @@ module OpenURI
|
|||||||
# HTTP or HTTPS
|
# HTTP or HTTPS
|
||||||
if proxy
|
if proxy
|
||||||
if proxy_user && proxy_pass
|
if proxy_user && proxy_pass
|
||||||
klass = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_user, proxy_pass)
|
klass = Net::HTTP::Proxy(proxy_uri.hostname, proxy_uri.port, proxy_user, proxy_pass)
|
||||||
else
|
else
|
||||||
klass = Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port)
|
klass = Net::HTTP::Proxy(proxy_uri.hostname, proxy_uri.port)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
target_host = target.host
|
target_host = target.hostname
|
||||||
target_port = target.port
|
target_port = target.port
|
||||||
request_uri = target.request_uri
|
request_uri = target.request_uri
|
||||||
else
|
else
|
||||||
# FTP over HTTP proxy
|
# FTP over HTTP proxy
|
||||||
target_host = proxy_uri.host
|
target_host = proxy_uri.hostname
|
||||||
target_port = proxy_uri.port
|
target_port = proxy_uri.port
|
||||||
request_uri = target.to_s
|
request_uri = target.to_s
|
||||||
if proxy_user && proxy_pass
|
if proxy_user && proxy_pass
|
||||||
@ -736,10 +736,10 @@ module URI
|
|||||||
proxy_uri = ENV[name] || ENV[name.upcase]
|
proxy_uri = ENV[name] || ENV[name.upcase]
|
||||||
end
|
end
|
||||||
|
|
||||||
if proxy_uri && self.host
|
if proxy_uri && self.hostname
|
||||||
require 'socket'
|
require 'socket'
|
||||||
begin
|
begin
|
||||||
addr = IPSocket.getaddress(self.host)
|
addr = IPSocket.getaddress(self.hostname)
|
||||||
proxy_uri = nil if /\A127\.|\A::1\z/ =~ addr
|
proxy_uri = nil if /\A127\.|\A::1\z/ =~ addr
|
||||||
rescue SocketError
|
rescue SocketError
|
||||||
end
|
end
|
||||||
@ -804,7 +804,7 @@ module URI
|
|||||||
|
|
||||||
# The access sequence is defined by RFC 1738
|
# The access sequence is defined by RFC 1738
|
||||||
ftp = Net::FTP.new
|
ftp = Net::FTP.new
|
||||||
ftp.connect(self.host, self.port)
|
ftp.connect(self.hostname, self.port)
|
||||||
ftp.passive = true if !options[:ftp_active_mode]
|
ftp.passive = true if !options[:ftp_active_mode]
|
||||||
# todo: extract user/passwd from .netrc.
|
# todo: extract user/passwd from .netrc.
|
||||||
user = 'anonymous'
|
user = 'anonymous'
|
||||||
|
@ -205,8 +205,31 @@ module URI
|
|||||||
self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)
|
self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2)
|
||||||
self.set_port(self.default_port) if self.default_port && !@port
|
self.set_port(self.default_port) if self.default_port && !@port
|
||||||
end
|
end
|
||||||
|
|
||||||
attr_reader :scheme
|
attr_reader :scheme
|
||||||
|
|
||||||
|
# returns the host component of the URI.
|
||||||
|
#
|
||||||
|
# URI("http://foo/bar/baz").host #=> "foo"
|
||||||
|
#
|
||||||
|
# It returns nil if no host component.
|
||||||
|
#
|
||||||
|
# URI("mailto:foo@example.org").host #=> nil
|
||||||
|
#
|
||||||
|
# The component doesn't contains the port number.
|
||||||
|
#
|
||||||
|
# URI("http://foo:8080/bar/baz").host #=> "foo"
|
||||||
|
#
|
||||||
|
# Since IPv6 addresses are wrapped by brackets in URIs,
|
||||||
|
# this method returns IPv6 addresses wrapped by brackets.
|
||||||
|
# This form is not appropriate to pass socket methods such as TCPSocket.open.
|
||||||
|
# If unwrapped host names are required, use "hostname" method.
|
||||||
|
#
|
||||||
|
# URI("http://[::1]/bar/baz").host #=> "[::1]"
|
||||||
|
# URI("http://[::1]/bar/baz").hostname #=> "::1"
|
||||||
|
#
|
||||||
attr_reader :host
|
attr_reader :host
|
||||||
|
|
||||||
attr_reader :port
|
attr_reader :port
|
||||||
attr_reader :registry
|
attr_reader :registry
|
||||||
attr_reader :path
|
attr_reader :path
|
||||||
@ -412,6 +435,38 @@ module URI
|
|||||||
v
|
v
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# extract the host part of the URI and unwrap brackets for IPv6 addresses.
|
||||||
|
#
|
||||||
|
# This method is same as URI::Generic#host except
|
||||||
|
# brackets for IPv6 (andn future IP) addresses are removed.
|
||||||
|
#
|
||||||
|
# u = URI("http://[::1]/bar")
|
||||||
|
# p u.hostname #=> "::1"
|
||||||
|
# p u.host #=> "[::1]"
|
||||||
|
#
|
||||||
|
def hostname
|
||||||
|
v = self.host
|
||||||
|
/\A\[(.*)\]\z/ =~ v ? $1 : v
|
||||||
|
end
|
||||||
|
|
||||||
|
# set the host part of the URI as the argument with brackets for IPv6 addresses.
|
||||||
|
#
|
||||||
|
# This method is same as URI::Generic#host= except
|
||||||
|
# the argument can be bare IPv6 address.
|
||||||
|
#
|
||||||
|
# u = URI("http://foo/bar")
|
||||||
|
# p u.to_s #=> "http://foo/bar"
|
||||||
|
# u.hostname = "::1"
|
||||||
|
# p u.to_s #=> "http://[::1]/bar"
|
||||||
|
#
|
||||||
|
# If the arugument seems IPv6 address,
|
||||||
|
# it is wrapped by brackets.
|
||||||
|
#
|
||||||
|
def hostname=(v)
|
||||||
|
v = "[#{v}]" if /\A\[.*\]\z/ !~ v && /:/ =~ v
|
||||||
|
self.host = v
|
||||||
|
end
|
||||||
|
|
||||||
def check_port(v)
|
def check_port(v)
|
||||||
return v unless v
|
return v unless v
|
||||||
|
|
||||||
|
@ -695,4 +695,14 @@ class URI::TestGeneric < Test::Unit::TestCase
|
|||||||
assert_raise(URI::InvalidURIError) { uri.path = 'bar' }
|
assert_raise(URI::InvalidURIError) { uri.path = 'bar' }
|
||||||
assert_raise(URI::InvalidURIError) { uri.query = 'bar' }
|
assert_raise(URI::InvalidURIError) { uri.query = 'bar' }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_ipv6
|
||||||
|
assert_equal("[::1]", URI("http://[::1]/bar/baz").host)
|
||||||
|
assert_equal("::1", URI("http://[::1]/bar/baz").hostname)
|
||||||
|
|
||||||
|
u = URI("http://foo/bar")
|
||||||
|
assert_equal("http://foo/bar", u.to_s)
|
||||||
|
u.hostname = "::1"
|
||||||
|
assert_equal("http://[::1]/bar", u.to_s)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user