8

I need an application to block an HTTP request so I had to add a couple of lines of code, the only piece I couldn't figure out was the statement if uri.scheme == 'https'; http.use_ssl = true is there a way I can set http/https in the current statement:

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

Added: IOError: use_ssl value changed, but session already started

4

2 回答 2

20

根据文档,您不能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
于 2011-10-17T20:30:31.170 回答
5

尝试将您的代码更改为

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
于 2011-10-17T20:10:11.323 回答