ruby rest_客户端异常处理
我想在Ruby中使用REST客户端gem执行一些HTTP REST请求 以下是readme.md 我编写了这个简单的命令行脚本,试图在响应代码与2xx不同的情况下捕获异常:ruby rest_客户端异常处理,ruby,exception-handling,rest-client,Ruby,Exception Handling,Rest Client,我想在Ruby中使用REST客户端gem执行一些HTTP REST请求 以下是readme.md 我编写了这个简单的命令行脚本,试图在响应代码与2xx不同的情况下捕获异常: RestClient.get('http://thisurldoesnotexist/resource') { |response, request, result, &block| case response.code when 200 p "It worked !" response el
RestClient.get('http://thisurldoesnotexist/resource') { |response, request, result, &block|
case response.code
when 200
p "It worked !"
response
else
response.return!(request, result, &block)
end
}
嗨,在标准输出上得到了这个:
/home/*****/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in `initialize': getaddrinfo: Name or service not known (SocketError)
from /home/solyaris/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in `open'
from /home/solyaris/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:878:in `block in connect'
from /home/solyaris/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/timeout.rb:52:in `timeout'
from /home/solyaris/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:877:in `connect'
from /home/solyaris/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:862:in `do_start'
from /home/solyaris/.rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/net/http.rb:851:in `start'
from /home/solyaris/.rvm/gems/ruby-2.0.0-p247/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit'
from /home/solyaris/.rvm/gems/ruby-2.0.0-p247/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute'
from /home/solyaris/.rvm/gems/ruby-2.0.0-p247/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute'
from /home/solyaris/.rvm/gems/ruby-2.0.0-p247/gems/rest-client-1.6.7/lib/restclient.rb:68:in `get'
from prova_rest.rb:3:in `<main>'
我怎样才能抓住SocketError?
我错在哪里
谢谢
giorgio只有在从服务器接收到一些响应时才会执行回调块。在这种情况下,名称解析失败,因此RestClient.get只是抛出一个异常,而不输入块。因此,只需将代码包装在begin…end构造中
begin
RestClient.get('http://thisurldoesnotexist/resource') { |response, request, result, &block|
case response.code
when 200
p "It worked !"
response
else
response.return!(request, result, &block)
end
}
rescue SocketError => e
# Handle your error here
end
只有当从服务器接收到一些响应时,才会执行回调块。在这种情况下,名称解析失败,因此RestClient.get只是抛出一个异常,而不输入块。因此,只需将代码包装在begin…end构造中
begin
RestClient.get('http://thisurldoesnotexist/resource') { |response, request, result, &block|
case response.code
when 200
p "It worked !"
response
else
response.return!(request, result, &block)
end
}
rescue SocketError => e
# Handle your error here
end