Ruby: блокирует HTTP.new.start и динамический HTTP (S) - PullRequest
8 голосов
/ 18 октября 2011

Мне нужно приложение, чтобы заблокировать HTTP-запрос, поэтому мне пришлось добавить пару строк кода, единственная часть, которую я не смог понять, это утверждение if uri.scheme == 'https'; http.use_ssl = true есть ли способ установить http / https в текущий отчет:

Net::HTTP.new(uri.host, uri.port).start do |http|

  # Causes and IOError... 
  if uri.scheme == 'https'
    http.use_ssl = true
  end

  request = Net::HTTP::Get.new(uri.request_uri)
  http.request(request)
end

Добавлено: IOError: use_ssl value changed, but session already started

Ответы [ 2 ]

20 голосов
/ 18 октября 2011

В документации , вы не можете вызвать use_ssl= после начала сеанса (т.е. после start). Вы должны установить его раньше, например ::

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'

http.start do |h|
  h.request Net::HTTP::Get.new(uri.request_uri)
end
4 голосов
/ 18 октября 2011

Попробуйте изменить код на

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

if uri.scheme =='https'
  http.use_ssl = true
end

http.start do
  request = Net::HTTP::Get.new(uri.request_uri)
  puts http.request(request)
end
...