From db6d5b15be94735ef08ba844561f9ef9f320ae19 Mon Sep 17 00:00:00 2001 From: akr Date: Fri, 11 Feb 2005 02:47:11 +0000 Subject: [PATCH] * lib/open-uri.rb (URI::HTTP#proxy_open): new option supported: :http_basic_authentication. suggested by Kent Sibilev. [ruby-core:4392] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7944 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 ++++++ lib/open-uri.rb | 18 ++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ef7d34e6b6..9527e272c2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri Feb 11 11:33:53 2005 Tanaka Akira + + * lib/open-uri.rb (URI::HTTP#proxy_open): new option supported: + :http_basic_authentication. + suggested by Kent Sibilev. [ruby-core:4392] + Thu Feb 10 13:52:42 2005 NAKAMURA Usaku * configure.in, win32/Makefile.sub (LIBS, COMMON_HEADERS): use diff --git a/lib/open-uri.rb b/lib/open-uri.rb index 2c87e29224..ff25b849af 100644 --- a/lib/open-uri.rb +++ b/lib/open-uri.rb @@ -95,9 +95,9 @@ module OpenURI :proxy => true, :progress_proc => true, :content_length_proc => true, + :http_basic_authentication => true, } - def OpenURI.check_options(options) # :nodoc: options.each {|k, v| next unless Symbol === k @@ -381,6 +381,15 @@ module OpenURI # When false or nil is given, the environment variables are ignored and # connection will be made to a server directly. # + # [:http_basic_authentication] + # Synopsis: + # :http_basic_authentication=>[user, password] + # + # If :http_basic_authentication is specified, + # the value should be an array which contains 2 strings: + # username and password. + # It is used for HTTP Basic authentication defined by RFC 2617. + # # [:content_length_proc] # Synopsis: # :content_length_proc => lambda {|content_length| ... } @@ -547,8 +556,13 @@ module URI require 'net/http' resp = nil + req = Net::HTTP::Get.new(uri.to_s, header) + if options.include? :http_basic_authentication + user, pass = options[:http_basic_authentication] + req.basic_auth user, pass + end Net::HTTP.start(self.host, self.port) {|http| - http.request_get(uri.to_s, header) {|response| + http.request(req) {|response| resp = response if options[:content_length_proc] && Net::HTTPSuccess === resp if resp.key?('Content-Length')