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