diff --git a/bin/httparty b/bin/httparty old mode 100644 new mode 100755 diff --git a/lib/httparty.rb b/lib/httparty.rb index 6f9ec57a..1476f313 100644 --- a/lib/httparty.rb +++ b/lib/httparty.rb @@ -296,6 +296,17 @@ def query_string_normalizer(normalizer) default_options[:query_string_normalizer] = normalizer end + # Allows setting of SSL version to use. + # You can get a list of valid versions from OpenSSL::SSL::SSLContext::METHODS. + # + # class Foo + # include HTTParty + # ssl_version :SSLv3 + # end + def ssl_version(version) + default_options[:ssl_version] = version + end + # Allows setting an OpenSSL certificate authority file # # class Foo diff --git a/lib/httparty/request.rb b/lib/httparty/request.rb index db556a08..6ec2080b 100644 --- a/lib/httparty/request.rb +++ b/lib/httparty/request.rb @@ -113,6 +113,10 @@ def attach_ssl_certificates(http) http.ca_path = options[:ssl_ca_path] http.verify_mode = OpenSSL::SSL::VERIFY_PEER end + + if options[:ssl_version] + http.ssl_version = options[:ssl_version] + end end end diff --git a/spec/httparty/request_spec.rb b/spec/httparty/request_spec.rb index f233dd12..04201ebb 100644 --- a/spec/httparty/request_spec.rb +++ b/spec/httparty/request_spec.rb @@ -165,6 +165,11 @@ request.send(:http).use_ssl?.should == true end + it 'uses specified ssl_version' do + request = HTTParty::Request.new(Net::HTTP::Get, 'https://foobar.com', :ssl_version => :TLSv1) + request.send(:http).ssl_version.should == :TLSv1 + end + context "PEM certificates" do before do OpenSSL::X509::Certificate.stub(:new) diff --git a/spec/httparty_spec.rb b/spec/httparty_spec.rb index 5650b4be..d23baa98 100644 --- a/spec/httparty_spec.rb +++ b/spec/httparty_spec.rb @@ -38,6 +38,13 @@ end end + describe 'ssl_version' do + it 'should set the ssl_version content' do + @klass.ssl_version :SSLv3 + @klass.default_options[:ssl_version].should == :SSLv3 + end + end + describe 'http_proxy' do it 'should set the address' do @klass.http_proxy 'proxy.foo.com', 80