aks*_*aks 11 ruby sockets ruby-on-rails
我正在使用RestClientruby类进行网络调用.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
Run Code Online (Sandbox Code Playgroud)
广泛的救援被召唤和打印SocketError,但为什么以前rescue SocketError不被触发!
你看到我遗失的东西吗?
小智 7
有一些例外情况需要您挽救,以防万一您要正常失败。
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')
Run Code Online (Sandbox Code Playgroud)
因为您可能会遇到有关uri是404目标地址或不存在的域,IP等问题。
从上面可以看到,在处理连接到远程uri时可能会遇到不同的情况。上面的代码从最常见的场景中解救出来。
URL缺少第一个,由RestClient本身处理。
下面的以下三个是无效域,它们将因SocketError(在这种情况下,基本上是DNS错误)而失败。
最后,在最后一个调用中,我们尝试连接到没有正在运行服务器的IP-因此它抛出ERRNO :: ECONNREFUSED
| 归档时间: |
|
| 查看次数: |
3798 次 |
| 最近记录: |