如何使用 RestClient 修复 Ruby 中的套接字错误?

2024-02-16

我在用RestClient在 ruby​​ 类中进行网络调用。我得到了SocketError每当我没有连接到互联网时。我已经添加了一个救援块来捕获异常,但我仍然无法这样做。

错误消息是:SocketError (Failed to open TCP connection to api.something.com:443 (getaddrinfo: Name or service not known))

module MyProject
  class Client
    def get_object(url, params={})
      response = RestClient.get(url, {params: params})
    rescue SocketError => e
      puts "In Socket errror"
    rescue => e
      puts (e.class.inspect)
    end
  end
end

广泛的救援被召集并打印SocketError,但是为什么前面的rescue SocketError没有被触发!

你看到我缺少的东西了吗?


如果您想优雅地失败,则需要挽救一些例外情况。

require 'rest-client'
def get_object(url, params={})
  response = RestClient.get(url, {params: params})
rescue RestClient::ResourceNotFound => e
  p e.class
rescue SocketError => e
  p e.class
rescue Errno::ECONNREFUSED => e
  p e.class
end

get_object('https://www.google.com/missing')
get_object('https://dasdkajsdlaadsasd.com')
get_object('dasdkajsdlaadsasd.com')
get_object('invalid')
get_object('127.0.0.1')

因为您可能会遇到有关 uri 是 404 目标、不存在的域、IP 等的问题。

正如您在上面看到的,在处理连接到远程 uri 时可能会遇到不同的情况。上面的代码从最常见的场景中解救出来。

第一个 URL 丢失,由 RestClient 本身处理。

以下三个域是无效域,将会因 SocketError 失败(在这种情况下基本上是 DNS 错误)。

最后,在最后一次调用中,我们尝试连接到没有运行服务器的 IP - 因此它会抛出 ERRNO::ECONNREFUSED

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 RestClient 修复 Ruby 中的套接字错误? 的相关文章

随机推荐

  • 使用“BaseClass *”类型的表达式初始化“SubClass *__strong”时不兼容的指针类型

    在 Objective C 中 为什么我们不能alloc init or new一个带有超类的基类对象 而我们可以使用超类的构造函数来初始化 下面是一些代码 s1可以很轻松地创建 NSMutableString s1 NSString st
  • 如何在另一个项目中包含 Web 参考端点配置

    我有 2 个项目 X 和 Y Y 调用 Web 服务 配置在 Y 的 app config 它是一个 DLL 中定义 当 X 调用 Y 方法时 出现以下异常 System InvalidOperationException Could no
  • 如何获取HTA窗口的大小?

    您可以设置 HTA 窗口的大小 但我找不到获取其大小的方法 我所能想到的就是读书document body offsetWidth and offsetHeight 但这些给你的是视口大小而不是实际的窗口大小 有可能知道吗 似乎没有属性或方
  • 退出临界区

    考虑多个线程同时执行以下代码 long gf 0 global variable or class member if InterlockedCompareExchange gf 1 0 0 lock cmpxchg some exclus
  • 重写 JS 中的赋值运算符

    var myObject myKey myValue typeof myObject myKey returns string myObject myKey newValue console log myObject myKey print
  • 如何在Python 3.x中强制输入整数? [复制]

    这个问题在这里已经有答案了 我正在尝试用 Python 编写一个程序 该程序接受输入以重复斐波那契数列的次数 i 1 timeNum input How many times do you want to repeat the sequen
  • 用 C++ 读/写设备

    如何用 C 读取 写入设备 该设备位于 dev ttyPA1 我考虑过 fstream 但我不知道设备是否具有我可以在不阻塞应用程序的情况下读取的输出 我的目标是创建一个应用程序 您可以在终端中写入一些内容 然后将其发送到 dev ttyP
  • 简单 SparkSQL 查询中未修剪分区

    我正在尝试从 SparkSQL 表 S3 中的 parquet 有效地选择各个分区 但是 我看到 Spark 打开表中所有 parquet 文件的证据 而不仅仅是那些通过过滤器的文件 对于具有大量分区的表来说 即使是小型查询也会变得昂贵 这
  • IOS Swift - 无法从地址簿中检索个人笔记

    有人有什么建议为什么我可以获得名字 姓氏和生日 但是我无法检索从 iphone 通讯录中提交的笔记吗 准备工作 已授予地址簿访问权限 添加到地址簿中的人员包含所有字段 包括注释 当前结果 nil 仅用于注释 所有其他字段均已正确检索 使用的
  • Firebase 中如何计算连接

    连接数是如何计算的 假设我有一个 Web 应用程序 其中一个负载会向所有连接的客户端发送一条消息 假设我有 5 个连接的客户端 这是否意味着只要打开了 Web 应用程序的浏览器选项卡 它就会计为 1 个连接 这意味着我将有 6 个并发连接
  • 无法从groovy连接到oracle数据库

    您好 我无法连接到 groovy 中的 Oracle 数据库 我在 groovy 控制台中使用了以下代码 但出现以下编译错误 unable to resolve class oracle jdbc driver OracleTypes at
  • 找不到 ViewModel 的视图

    我有一个使用 Caliburn Micro 的 wpf 应用程序 我有一个视图 MyView
  • Python:没有名为“dash.development”的模块。 “dash”不是一个包

    我正在尝试运行这个 Dash 教程https github com cryptopotluck alpha vantage tutorial tree master dash bootstrap https github com crypt
  • R:如何相对于 x 轴分散(抖动)点?

    我在 R 中有以下代码片段 dat lt data frame cond factor rep A 10 rating c 1 2 3 4 6 6 7 8 9 10 ggplot dat aes x cond y rating geom b
  • 无法在 Visual Studio 2013 中显示 SQL Azure 表定义

    我收到的错误是 加载问题 设计器在加载表定义时遇到错误 我可以很好地查看VS内表中的数据 甚至还可以查询数据 这是我的计算机上的全新安装 我尝试过的 尝试在 服务器资源管理器 和 SQL Server 对象资源管理器 检查我的登录凭据是否有
  • 我应该使用什么标记来描述使用 schema.org 的社交媒体链接?

    我有一个地方 本地企业 其中有多个字段可以很好地映射到 schema org 条目 有一个字段我不确定如何标记 我们有该企业社交媒体帐户的链接 例如 Twitter 帐户 Facebook 页面和 Pinterest 帐户 这些应该如何在
  • Django:ModelChoiceField 删除默认--------- 选择

    如何从 ModelChoiceField 中删除默认的 选择 Use empty label None field2 forms ModelChoiceField queryset empty label None 请检查文档模型选择字段
  • 如何使用 SFINAE 检测 noexcept 方法

    我问的是一个 流行 问题的变体 检测类方法的存在 我在 SO 中读过很多答案 大多数 C 17 后 解决方案看起来像this https stackoverflow com questions 55191505 c compile time
  • 分发依赖于静态框架的动态框架的正确方法是什么?

    我正在构建一个闭源动态框架 它依赖于第三方闭源静态框架 我将静态依赖框架链接到我的框架的项目 目标 如中所述这个苹果技术说明 https developer apple com library content technotes tn243
  • 如何使用 RestClient 修复 Ruby 中的套接字错误?

    我在用RestClient在 ruby 类中进行网络调用 我得到了SocketError每当我没有连接到互联网时 我已经添加了一个救援块来捕获异常 但我仍然无法这样做 错误消息是 SocketError Failed to open TCP