2015-09-10 4 views
1

У меня есть веб-сервер, с которого мне нужно получить некоторые данные. Я хочу, чтобы повторно использовать соединение, поэтому я выбрал HTTP.newRuby Net :: HTTP Получить запрос Ошибка при использовании https

require "net/http" 
require "openssl" 
uri = URI.parse("https://example.com") 
path = "/index.html" 
http = Net::HTTP.new(uri.host, uri.port, 
    :use_ssl => uri.scheme == 'https') 
request = Net::HTTP::Get.new "/index.html" 
response = http.request(request) 

При выдаче запроса (response = http.request(request)) рубин бросает TypeError:

TypeError: no implicit conversion of Hash into String 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:879:in `initialize' 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:879:in `open' 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:879:in `block in connect' 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/timeout.rb:74:in `timeout' 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:878:in `connect' 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:863:in `do_start' 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:852:in `start' 
    from /usr/local/Cellar/ruby/2.2.2/lib/ruby/2.2.0/net/http.rb:1375:in `request' 
    from (irb):14 
    from /usr/local/bin/irb:11:in `<main>' 

Тот же запрос работает, когда я использую HTTP

+2

Мне кажется, проблема в том, что на самом деле проблема здесь: Net :: HTTP.new (uri.host, uri.port,: use_ssl => uri.scheme == 'https') ', потому что это не соответствует сигнатуре для 'Net :: HTTP.new', который не принимает' Hash'. Подпись метода - 'new (address, port = nil, p_addr =: ENV, p_port = nil, p_user = nil, p_pass = nil)'. Я думаю, что это должно быть 'http = Net :: HTTP.new (uri.host, uri.port); http.use_ssl = uri.scheme == 'https'; ' – engineersmnky

ответ

2

Я не уверен, что вы не злоупотребляете вызовом. Почему бы просто не использовать:

http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true 

Я основывая это на предположении, что вы уже знаете, требует ли ваш целевой сервер HTTPS или нет.