aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-28 10:51:37 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-28 10:51:37 +0000
commit161994775646a76ab33c82066167c57e8f10b53d (patch)
tree09565b9cb2499bfe25cba63db11ba1f421829696
parent25b2891344847785241e65c662a16f6fe9dce534 (diff)
downloadruby-161994775646a76ab33c82066167c57e8f10b53d.tar.gz
Net::HTTP.new: Support no_proxy parameter [Feature #11195]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60054 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--NEWS4
-rw-r--r--lib/net/http.rb11
-rw-r--r--test/net/http/test_http.rb10
3 files changed, 22 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index c03075dbf8..35797183c9 100644
--- a/NEWS
+++ b/NEWS
@@ -66,6 +66,10 @@ with all sufficient information, see the ChangeLog file or Redmine
* Kernel#yield_self [Feature #6721]
+* Net::HTTP
+
+ * Net::HTTP.new supports no_proxy parameter [Feature #11195]
+
* Numeric
* Numerical comparison operators (<,<=,>=,>) no longer rescue exceptions
diff --git a/lib/net/http.rb b/lib/net/http.rb
index 9bb284a081..bfc6d4535d 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -629,10 +629,11 @@ module Net #:nodoc:
#
# If you are connecting to a custom proxy, +p_addr+ the DNS name or IP
# address of the proxy host, +p_port+ the port to use to access the proxy,
- # and +p_user+ and +p_pass+ the username and password if authorization is
- # required to use the proxy.
+ # +p_user+ and +p_pass+ the username and password if authorization is
+ # required to use the proxy, and p_no_proxy spcifies hosts which doesn't
+ # use the proxy.
#
- def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil)
+ def HTTP.new(address, port = nil, p_addr = :ENV, p_port = nil, p_user = nil, p_pass = nil, p_no_proxy = nil)
http = super address, port
if proxy_class? then # from Net::HTTP::Proxy()
@@ -644,6 +645,10 @@ module Net #:nodoc:
elsif p_addr == :ENV then
http.proxy_from_env = true
else
+ if p_addr && p_no_proxy && !URI::Generic.use_proxy?(p_addr, p_addr, p_port, p_no_proxy)
+ p_addr = nil
+ p_port = nil
+ end
http.proxy_address = p_addr
http.proxy_port = p_port || default_port
http.proxy_user = p_user
diff --git a/test/net/http/test_http.rb b/test/net/http/test_http.rb
index 43f590839f..13c95fc0dc 100644
--- a/test/net/http/test_http.rb
+++ b/test/net/http/test_http.rb
@@ -97,6 +97,16 @@ class TestNetHTTP < Test::Unit::TestCase
end
end
+ def test_proxy_address_no_proxy
+ clean_http_proxy_env do
+ http = Net::HTTP.new 'hostname.example', nil, 'proxy.example', nil, nil, nil, 'example'
+ assert_nil http.proxy_address
+
+ http = Net::HTTP.new '10.224.1.1', nil, 'proxy.example', nil, nil, nil, 'example,10.224.0.0/22'
+ assert_nil http.proxy_address
+ end
+ end
+
def test_proxy_from_env_ENV
clean_http_proxy_env do
ENV['http_proxy'] = 'http://proxy.example:8000'