(rails) url 验证的奇怪问题

发布于 2024-08-13 09:39:11 字数 912 浏览 3 评论 0原文

我正在尝试查看某个网址是否存在。这是我这样做的代码:

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

i'm trying to see if a url exists. here is my code for doing so:

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

however, this code is failing. it says http://www.biorad.com is not a valid website. this is absolutely incorrect. Also, knowing that http://www.biorad.com just redirects you to http://www.bio-rad.com/evportal/evolutionPortal.portal i tried this url too, and that also failed. again, i know this can't be possible. what's wrong with my code??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

十雾 2024-08-20 09:39:11

您提供的每个示例 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('/')
}

Each of the example urls you gave is a redirect (http status code 301 or 302). Your code is only considering http status code 2xx to be success. Add another case:

when Net::HTTPRedirection then true

UPDATE: Note that using HTTP HEAD instead of GET will transmit less data across the network.

uri = URI.parse(url)
response = Net::HTTP.start(uri.host, uri.port) {|http|
  http.head('/')
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文