检查URL可用性Ruby on Rails

假设在用户提交的URL的原始validation之后,我有一个看起来像URL的字符串:

url = 'http://www.thisdomaindoesntexist.com/dont_even_ask_about/this/uri' 

我如何检查它是否可用?

我在我的is_valid_link函数中尝试了这个:

 require "net/http" url = URI.parse(url) req = Net::HTTP.new(url.host, url.port) res = req.request_head(url.path) 

它可以工作,如果服务器存在给我回HTTP响应,但问题是,如果坏URL我得到这样的错误:

 SocketError in PostsController#create getaddrinfo: nodename nor servname provided, or not known 

我该如何正确地进行这种validation?

提前致谢。

您可以使用rescue来捕获错误并执行一些error handling

 begin require "net/http" url = URI.parse(url) req = Net::HTTP.new(url.host, url.port) res = req.request_head(url.path) rescue # error occured, return false false else # valid site true end 

使用rescue内联:

 require "net/http" url = URI.parse(url) req = Net::HTTP.new(url.host, url.port) res = req.request_head(url.path) rescue false 

我找了一种方法来检查URL是否存在了5个小时,这个post确实对我有帮助。 我是铁杆的新手,想找个容易的东西。

这是我如何将代码集成到控制器中:

 require "net/http" def url url = URI.parse('http://www.url that you want to check.com/' + "/") end def req @req = Net::HTTP.new(url.host, url.port) end def res #res @res = req.request_head(url.path) rescue false end def test if res == false "something" else "another thing" end 

你必须确保URL以“/”结尾,否则代码将无效。