I used RVM to install Ruby 2.0 on my Mac OS X Mountain Lion. OpenSSL is
installed automatically by RVM before installing Ruby 2.0 (autolibs via
Homebrew). My problem is that ‘net/http’ cannot request through HTTPS.
Here is my script:
require ‘net/http’
uri = URI(‘https://github.com’)
Net::HTTP.start(uri.host, uri.port,
:use_ssl => uri.scheme == ‘https’) do |http|
request = Net::HTTP::Get.new uri
response = http.request request # Net::HTTPResponse object
end
puts response
Here is the output by running it:
/Users/siegfried/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:891:in
connect': undefined method
set_params’ for
#OpenSSL::SSL::SSLContext:0x007ff1ad0acea8 (NoMethodError)
from
/Users/siegfried/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in
do_start' from /Users/siegfried/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in
start’
from
/Users/siegfried/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:582:in
start' from Desktop/test.rb:5:in
’
Does anyone have a clue? Thanks.
Zhi-Qiang L.
[email protected]
On Oct 10, 2013, at 6:14 AM, Zhi-Qiang L. [email protected]
wrote:
puts response
Looks like it may be a precedence problem. Try changing to this:
Net::HTTP.start(uri.host, uri.port,
:use_ssl => (uri.scheme == ‘https’)) do |http|
It’s binding the :use_ssl => uri.scheme first, then doing the compare
I had the same problem, and I found just adding require 'openssl'
at
the
top of the script fixed the issue. I don’t know why though, didn’t have
this problem until updating to the latest ruby 2.0 via RVM.
Here is an example:
http = Net::HTTP.start(‘github.com’, 443, :use_ssl => true)
NoMethodError: undefined method `set_params’ for
#OpenSSL::SSL::SSLContext:0x007f9249170d80
from
/Users/samuel/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:891:in
`connect’
from
/Users/samuel/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in
`do_start’
from
/Users/samuel/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:857:in
`start’
from
/Users/samuel/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:582:in
`start’
from (irb):5
from /Users/samuel/.rvm/rubies/ruby-2.0.0-p247/bin/irb:13:in `’
2.0.0p247 :006 > require ‘openssl’
=> true
2.0.0p247 :007 > http = Net::HTTP.start(‘github.com’, 443, :use_ssl =>
true)
=> #<Net::HTTP github.com:443 open=true>
I fixed the problem by reinstalling ruby by RVM.
Zhi-Qiang L.
[email protected]