如何测试URL是否存在

时间:2015-08-30 11:08:31

标签: ruby-on-rails ruby

我想通过访问URL来测试我得到的响应代码。有些网址不存在,我希望获得404(url not available)或其他任何代码。我怎么能做到这一点?

这是我尝试过的代码:

require 'net/http'
url = URI.parse("http://www.someurl.lc/")
req = Net::HTTP.new(url.host, url.port)
res = req.request_head(url.path)
puts res.code

当我使用上面的代码,Curb或其他使用Class: Net::HTTP的类似宝石时,当我尝试访问不会使用{{3}}的网址时出现错误:'initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError)存在,这违背了他测试的目的。

1 个答案:

答案 0 :(得分:2)

为什么不将代码放在begin rescue块中,如下所示:

  begin
    url = URI.parse("http://www.someurl.lc/")
    req = Net::HTTP.new(url.host, url.port)
    res = req.request_head(url.path)
    puts res.code
  rescue => e
    puts "Exception: #{e}"
    # do the next thing
  end

更新

您不应该挽救所有标准错误。你可以拯救这样的特定错误:

  begin
    url = URI.parse("http://www.someurl.lc/")
    req = Net::HTTP.new(url.host, url.port)
    res = req.request_head(url.path)
    puts res.code
  rescue SocketError => e
    puts "Exception: #{e}"
    # do the next thing
  end

您应该从仅救出SocketError开始,并继续添加其他错误类(如果评论中提到的sawa)。