假设在用户提交的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
我该如何正确地进行这种验证?
提前致谢。
答案 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以“/”结尾,否则代码将无效。