【问题标题】:ruby rest_client exception handlingruby rest_client 异常处理
【发布时间】:2013-12-04 09:35:20
【问题描述】:

我想在 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
}

你好在标准输出上得到了这个:

/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 ? 我哪里错了?

谢谢 乔治

【问题讨论】:

    标签: ruby exception-handling rest-client


    【解决方案1】:

    回调块只有在接收到来自服务器的响应时才会执行。在这种情况下,名称解析失败,所以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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多