我想在Ruby中使用rest-client gem做一些HTTP REST请求,
在https://github.com/rest-client/rest-client上的 readme.md之后, 我编写了这个简单的命令行脚本,尝试在响应代码不同于2xx的情况下捕获异常:
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 }
你好stdout输出:
/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 `'
我如何捕获SocketError?哪里我错了?
谢谢乔治
仅当从服务器接收一些响应时才执行回调块.在这种情况下,名称解析失败,因此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