我想通过访问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)
存在,这违背了他测试的目的。
答案 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)。