处理不同类别的 404 错误

发布于 2025-01-03 03:21:26 字数 539 浏览 1 评论 0原文

我有许多继承 Page 类的类。它们共享相同的 update_ished 方法,该方法尝试在页面结束时更新状态。

由于这些 Page 类面临不同的问题,因此混合使用了不同的 net/http 代理,包括 OpenURI、Net::HTTP 和 Mechanize。

  def update_ended
    fetch_page(...) 
  rescue OpenURI::HTTPError, Net::HTTPNotFound, Mechanize::ResponseCodeError
    self.ended = true
    ...
    self.save!
  end

我想捕获 404 页面未找到异常 并结束 Page 对象。目前我的实现还不够细粒度,无法做到这一点。不同的异常有不同的方式来判断它是哪种 HTTP 状态。

在我上面的例子中,从 HTTP 错误的各种实现中确定代码(例如 404)的最佳方法是什么?我是否使用了多个救援,或者救援中是否有很多 if 语句?

I have many classes inheriting the Page class. They share the same update_ended method which tries to update the status when the page ends.

Since these Page classes faces different problems, a mix of different net/http agents are used, including OpenURI, Net::HTTP and Mechanize.

  def update_ended
    fetch_page(...) 
  rescue OpenURI::HTTPError, Net::HTTPNotFound, Mechanize::ResponseCodeError
    self.ended = true
    ...
    self.save!
  end

I want to catch 404 page not found exception and end a Page object. Currently my implementation is not fine-grained enough to do that. Different exceptions have different ways of telling what kind of HTTP status it is.

In my case above, what's the best way to determine the code (e.g. 404) from various implementation of HTTP errors? Do I use multiple rescue or do I have lots of if statements in the rescue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

始终不够 2025-01-10 03:21:26

也许最简单的方法就是捕获所有内容并查看消息:

def update_ended
    fetch_page(...) 
rescue Exception => e
    case e.message
        when /404/ then puts '404!'
        when /500/ then puts '500!'
        else puts 'IDK!'
    end
end

Probably easiest is to catch everything and look at the message:

def update_ended
    fetch_page(...) 
rescue Exception => e
    case e.message
        when /404/ then puts '404!'
        when /500/ then puts '500!'
        else puts 'IDK!'
    end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文