Если вы скажете u = URI.parse('http://google.com')
, вы получите URI::HTTP
назад, а u.port
будет иметь значение по умолчанию 80. Если вы скажете u = URI.parse('google.com')
, вы получите URI::Generic
обратно с u.port
будет nil
, как будет u.host
.
Итак, когда вы делаете это:
url = URI.parse('google.com')
http = Net::HTTP.new(url.host, url.port)
Вы действительно делаете это:
http = Net::HTTP.new(nil, nil)
и Net::HTTP
это не очень нравится.Вместо этого вы можете попробовать что-то вроде этого:
if(str.to_s.empty?)
# complain loudly about a missing str
end
begin
url = URI.parse(str)
url = URI.parse('http://' + str) if !url.scheme
if(url.scheme != 'http' && url.scheme != 'https')
# more complaining about bad input
end
http = Net::HTTP.new(url.host, url.port)
#...
rescue URI::Error => e
# even yet more complaining
end
Подобные вещи должны полностью обходить исключение и охватывать несколько других вещей, которые могут вас заинтересовать.