diff --git a/lib/faraday/adapter/net_http.rb b/lib/faraday/adapter/net_http.rb index d5c0061d0..4e8799949 100644 --- a/lib/faraday/adapter/net_http.rb +++ b/lib/faraday/adapter/net_http.rb @@ -173,6 +173,8 @@ def configure_request(http, req) end end http.open_timeout = req[:open_timeout] if req[:open_timeout] + http.read_timeout = req[:read_timeout] if req[:read_timeout] + if req[:write_timeout] && http.respond_to?(:write_timeout=) http.write_timeout = req[:write_timeout] end diff --git a/lib/faraday/options/request_options.rb b/lib/faraday/options/request_options.rb index cca000f8b..1a96fb8f9 100644 --- a/lib/faraday/options/request_options.rb +++ b/lib/faraday/options/request_options.rb @@ -3,8 +3,9 @@ module Faraday # RequestOptions contains the configurable properties for a Faraday request. class RequestOptions < Options.new(:params_encoder, :proxy, :bind, - :timeout, :open_timeout, :write_timeout, - :boundary, :oauth, :context, :on_data) + :timeout, :open_timeout, :read_timeout, + :write_timeout, :boundary, :oauth, + :context, :on_data) def []=(key, value) if key && key.to_sym == :proxy diff --git a/spec/faraday/adapter/net_http_spec.rb b/spec/faraday/adapter/net_http_spec.rb index 2197ab180..faf762c8c 100644 --- a/spec/faraday/adapter/net_http_spec.rb +++ b/spec/faraday/adapter/net_http_spec.rb @@ -21,6 +21,16 @@ expect(http.write_timeout).to eq(10) if http.respond_to?(:write_timeout=) end + it 'supports open_timeout' do + adapter.send(:configure_request, http, open_timeout: 10) + + expect(http.open_timeout).to eq(10) + end + it 'supports read_timeout' do + adapter.send(:configure_request, http, read_timeout: 10) + + expect(http.read_timeout).to eq(10) + end context 'with https url' do let(:url) { URI('https://example.com') }