У меня есть веб-сервер, с которого мне нужно получить некоторые данные. Я хочу, чтобы повторно использовать соединение, поэтому я выбрал HTTP.new
Ruby 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
Мне кажется, проблема в том, что на самом деле проблема здесь: 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