Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby rest_客户端异常处理_Ruby_Exception Handling_Rest Client - Fatal编程技术网

ruby rest_客户端异常处理

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

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