如何正确地判断来自Net::HTTP::Get(例如)的响应是否"成功"(即2xx返回码)?令人遗憾的是,文件中似乎没有提到这个简单的问题.

我有:

response=Net::HTTP.new( host, port ).request my_get_request # details not important

在谷歌搜索和近乎随机的输入之后,我终于确定这是可行的:

response.class < Net::HTTPSuccess

这真的是一种规范的方式吗?

推荐答案

对于Net::HTTP来说,是的,判断响应对象的类是实现这一点的方法.使用kind_of?(别名也为is_a?)更清晰(但功能等同于使用<):

response.kind_of? Net::HTTPSuccess

如果状态代码不是成功的,在response上调用value也会引发Net::HTTPError(多么糟糕的方法…).

如果可以,您可能需要考虑使用GEM而不是Net::HTTP,因为它们通常提供更好的API和性能.TyphoeusHTTParty是两个好的,among others.

Ruby相关问答推荐

Ruby:对于不存在的键,使用缺省值Hash在Hash中存储Hash

如何使用Ruby中的时区函数S标准库?

CarrierWave Multi-uploader重命名现有文件

RSpec 模拟对象示例

Ruby 符号到类

当没有传入块时,是否有更好的方法来防止屈服?

如何期望 RSpec should_receive 的一些(但不是全部)参数?

如何使用 if..else 块的结果分配变量?

VCRProxy:在 Capybara 内使用 VCR 记录 PhantomJS ajax 调用

Ruby代码美化,多行拆分长指令

Vagrant - 如何拥有特定于主机平台的配置步骤

迭代一个数组,一次 n 项

铲子 (<<) 运算符如何在 Ruby 哈希中工作?

将哈希转换为 struct

Ruby - time.now UTC

如何修复错误的 URI 不是 URI

你怎么说不等于在 Ruby 中?

通过 factory_girl 协会查找或创建记录

给定一组参数,如何将这些参数发送到 Ruby 中的特定函数?

如何使用 minitest 运行所有测试?