0

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

4

1 回答 1

0

您提供的每个示例 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('/')
}
于 2009-12-02T12:31:54.850 回答