[ruby/net-http] Add ability to configure default settings for new connections
https://github.com/ruby/net-http/commit/fed3dcd0c2
This commit is contained in:
parent
9f4b45fbf7
commit
70bdc0f777
@ -1128,29 +1128,61 @@ module Net #:nodoc:
|
|||||||
http
|
http
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class << HTTP
|
||||||
|
# Allows to set the default configuration that will be used
|
||||||
|
# when creating a new connection.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
#
|
||||||
|
# Net::HTTP.default_configuration = {
|
||||||
|
# read_timeout: 1,
|
||||||
|
# write_timeout: 1
|
||||||
|
# }
|
||||||
|
# http = Net::HTTP.new(hostname)
|
||||||
|
# http.open_timeout # => 60
|
||||||
|
# http.read_timeout # => 1
|
||||||
|
# http.write_timeout # => 1
|
||||||
|
#
|
||||||
|
attr_accessor :default_configuration
|
||||||
|
end
|
||||||
|
|
||||||
# Creates a new \Net::HTTP object for the specified server address,
|
# Creates a new \Net::HTTP object for the specified server address,
|
||||||
# without opening the TCP connection or initializing the \HTTP session.
|
# without opening the TCP connection or initializing the \HTTP session.
|
||||||
# The +address+ should be a DNS hostname or IP address.
|
# The +address+ should be a DNS hostname or IP address.
|
||||||
def initialize(address, port = nil) # :nodoc:
|
def initialize(address, port = nil) # :nodoc:
|
||||||
|
defaults = {
|
||||||
|
keep_alive_timeout: 2,
|
||||||
|
close_on_empty_response: false,
|
||||||
|
open_timeout: 60,
|
||||||
|
read_timeout: 60,
|
||||||
|
write_timeout: 60,
|
||||||
|
continue_timeout: nil,
|
||||||
|
max_retries: 1,
|
||||||
|
debug_output: nil,
|
||||||
|
response_body_encoding: false,
|
||||||
|
ignore_eof: true
|
||||||
|
}
|
||||||
|
options = defaults.merge(self.class.default_configuration || {})
|
||||||
|
|
||||||
@address = address
|
@address = address
|
||||||
@port = (port || HTTP.default_port)
|
@port = (port || HTTP.default_port)
|
||||||
@ipaddr = nil
|
@ipaddr = nil
|
||||||
@local_host = nil
|
@local_host = nil
|
||||||
@local_port = nil
|
@local_port = nil
|
||||||
@curr_http_version = HTTPVersion
|
@curr_http_version = HTTPVersion
|
||||||
@keep_alive_timeout = 2
|
@keep_alive_timeout = options[:keep_alive_timeout]
|
||||||
@last_communicated = nil
|
@last_communicated = nil
|
||||||
@close_on_empty_response = false
|
@close_on_empty_response = options[:close_on_empty_response]
|
||||||
@socket = nil
|
@socket = nil
|
||||||
@started = false
|
@started = false
|
||||||
@open_timeout = 60
|
@open_timeout = options[:open_timeout]
|
||||||
@read_timeout = 60
|
@read_timeout = options[:read_timeout]
|
||||||
@write_timeout = 60
|
@write_timeout = options[:write_timeout]
|
||||||
@continue_timeout = nil
|
@continue_timeout = options[:continue_timeout]
|
||||||
@max_retries = 1
|
@max_retries = options[:max_retries]
|
||||||
@debug_output = nil
|
@debug_output = options[:debug_output]
|
||||||
@response_body_encoding = false
|
@response_body_encoding = options[:response_body_encoding]
|
||||||
@ignore_eof = true
|
@ignore_eof = options[:ignore_eof]
|
||||||
|
|
||||||
@proxy_from_env = false
|
@proxy_from_env = false
|
||||||
@proxy_uri = nil
|
@proxy_uri = nil
|
||||||
|
@ -254,6 +254,18 @@ class TestNetHTTP < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_default_configuration
|
||||||
|
Net::HTTP.default_configuration = { open_timeout: 5 }
|
||||||
|
http = Net::HTTP.new 'hostname.example'
|
||||||
|
assert_equal 5, http.open_timeout
|
||||||
|
assert_equal 60, http.read_timeout
|
||||||
|
|
||||||
|
http.open_timeout = 10
|
||||||
|
assert_equal 10, http.open_timeout
|
||||||
|
ensure
|
||||||
|
Net::HTTP.default_configuration = nil
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
module TestNetHTTP_version_1_1_methods
|
module TestNetHTTP_version_1_1_methods
|
||||||
|
Loading…
x
Reference in New Issue
Block a user