(rails) странная проблема с проверкой URL - PullRequest
0 голосов
/ 01 декабря 2009

Я пытаюсь увидеть, существует ли URL. Вот мой код для этого:

validate :registered_domain_name_exists

private

def registered_domain_name_exists
  if url and url.match(URI::regexp(%w(http https))) then
    begin # check header response
      case Net::HTTP.get_response(URI.parse(url))
        when Net::HTTPSuccess then true
        else errors.add(:url, "URL does not exist") and false
      end
    rescue # DNS failures
      errors.add(:url, "URL does not exist") and false
    end
  end
end

однако этот код не работает. он говорит http://www.biorad.com не является действительным веб-сайтом. это абсолютно неверно. Кроме того, зная, что http://www.biorad.com просто перенаправляет вас на http://www.bio -rad.com / evportal / evolutionPortal.portal я тоже попробовал этот URL, и это тоже не удалось. опять же, я знаю, что это невозможно. что не так с моим кодом ??

1 Ответ

0 голосов
/ 02 декабря 2009

Каждый из приведенных вами примеров URL является перенаправлением (код состояния http 301 или 302). Ваш код рассматривает только http статус кода 2xx как успешный. Добавить другой случай:

when Net::HTTPRedirection then true

ОБНОВЛЕНИЕ: обратите внимание, что использование HTTP HEAD вместо GET будет передавать меньше данных по сети.

uri = URI.parse(url)
response = Net::HTTP.start(uri.host, uri.port) {|http|
  http.head('/')
}
...