diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-04-21 11:11:40 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-04-21 11:11:40 +0000 |
commit | 505d30228183a417e0a864254a6a9e79c37c9653 (patch) | |
tree | 7de0ebcce646976e8dfb13a4aefa23ba3737f34c /lib | |
parent | b87ee4d9792b68e81dd1d58befc986685b825e33 (diff) | |
download | ruby-505d30228183a417e0a864254a6a9e79c37c9653.tar.gz ruby-505d30228183a417e0a864254a6a9e79c37c9653.tar.xz ruby-505d30228183a417e0a864254a6a9e79c37c9653.zip |
* lib/open-uri.rb (URI::HTTP#proxy_open): set Host: field explicitly.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@6191 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/open-uri.rb | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/open-uri.rb b/lib/open-uri.rb index b41fcb402..a6186fbb2 100644 --- a/lib/open-uri.rb +++ b/lib/open-uri.rb @@ -1,7 +1,7 @@ #= open-uri.rb # #open-uri.rb is easy-to-use wrapper for net/http and net/ftp. -# +# #== Example # #It is possible to open http/ftp URL as usual a file: @@ -40,7 +40,7 @@ # } # #URI objects can be opened in similar way. -# +# # uri = URI.parse("http://www.ruby-lang.org/en/") # uri.open {|f| # ... @@ -66,7 +66,7 @@ module Kernel # If the first argument respond to `open' method, # the method is called with the rest arguments. # - # If the first argument is a string which begins with xxx://, + # If the first argument is a string which begins with xxx://, # it is parsed by URI.parse. If the parsed object respond to `open' method, # the method is called with the rest arguments. # @@ -181,7 +181,7 @@ module OpenURI end uri = redirect raise "HTTP redirection loop: #{uri}" if uri_set.include? uri.to_s - uri_set[uri.to_s] = true + uri_set[uri.to_s] = true else break end @@ -529,6 +529,16 @@ module URI header = {} options.each {|k, v| header[k] = v if String === k } + if uri.respond_to? :host + # According to RFC2616 14.23, Host: request-header field should be set + # an origin server. + # But net/http wrongly set a proxy server if an absolute URI is + # specified as a request URI. + # So open-uri override it here explicitly. + header['host'] = uri.host + header['host'] += ":#{uri.port}" if uri.port + end + require 'net/http' resp = nil Net::HTTP.start(self.host, self.port) {|http| |