检查URL可用性Ruby on Rails

时间:2011-08-23 06:03:47

标签: ruby validation url

假设在用户提交的URL的原始验证之后,我有一个看起来像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响应,它会起作用,但问题是如果网址错误,我会收到如下错误:

SocketError in PostsController#create

getaddrinfo: nodename nor servname provided, or not known

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

提前致谢。

2 个答案:

答案 0 :(得分:4)

您可以使用rescue来捕获错误并进行错误处理

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

答案 1 :(得分:0)

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

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

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以“/”结尾,否则代码将无效。