(rails)url验证的奇怪问题

时间:2009-12-01 09:57:55

标签: ruby-on-rails url-validation

我正试图查看网址是否存在。这是我的代码:

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我也尝试了这个网址,但也失败了。再一次,我知道这是不可能的。我的代码出了什么问题??

1 个答案:

答案 0 :(得分:0)

您提供的每个示例网址都是重定向(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('/')
}