(rails) странная проблема с проверкой URL
Я пытаюсь увидеть, существует ли 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 ответ
Решение
Каждый из приведенных вами примеров 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('/')
}