[前][次][番号順一覧][スレッド一覧]

ruby-changes:47939

From: naruse <ko1@a...>
Date: Thu, 28 Sep 2017 19:51:41 +0900 (JST)
Subject: [ruby-changes:47939] naruse:r60054 (trunk): Net::HTTP.new: Support no_proxy parameter [Feature #11195]

naruse	2017-09-28 19:51:37 +0900 (Thu, 28 Sep 2017)

  New Revision: 60054

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=60054

  Log:
    Net::HTTP.new: Support no_proxy parameter [Feature #11195]

  Modified files:
    trunk/NEWS
    trunk/lib/net/http.rb
    trunk/test/net/http/test_http.rb
Index: lib/net/http.rb
===================================================================
--- lib/net/http.rb	(revision 60053)
+++ lib/net/http.rb	(revision 60054)
@@ -629,10 +629,11 @@ module Net   #:nodoc: https://github.com/ruby/ruby/blob/trunk/lib/net/http.rb#L629
     #
     # 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: https://github.com/ruby/ruby/blob/trunk/lib/net/http.rb#L645
       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
Index: test/net/http/test_http.rb
===================================================================
--- test/net/http/test_http.rb	(revision 60053)
+++ test/net/http/test_http.rb	(revision 60054)
@@ -97,6 +97,16 @@ class TestNetHTTP < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/net/http/test_http.rb#L97
     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'
Index: NEWS
===================================================================
--- NEWS	(revision 60053)
+++ NEWS	(revision 60054)
@@ -66,6 +66,10 @@ with all sufficient information, see the https://github.com/ruby/ruby/blob/trunk/NEWS#L66
 
   * Kernel#yield_self  [Feature #6721]
 
+* Net::HTTP
+
+  * Net::HTTP.new supports no_proxy parameter [Feature #11195]
+
 * Numeric
 
   * Numerical comparison operators (<,<=,>=,>) no longer rescue exceptions

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]