在Ruby中使用HTTPClient,有办法在错误时获得响应吗?

问题描述 投票:0回答:1

我正在使用HTTPClient ruby库向我开发的一个REST服务发出一些基本的http请求,我想知道当发生错误时,我如何从服务中获得响应(服务返回一个状态码,如400或500)。

我的服务是返回一个中心的产品库存,所以它需要两个参数(在url中):一个产品id和一个中心id。当我调用这个服务,传递正确的产品和中心ID时,服务会返回一个200-OK的状态和产品的库存量(例如,产品的库存量是多少?8.0 表示该中心有8个单位的产品)。) 然而,如果我传递了一个错误的产品id(一个不在我们数据库中的产品),服务就会返回400--Bad Request和一个错误信息,表明该id不存在。

所以我在Ruby中使用了如下方法

def stock(product, location)
   response = @client.get_content("stock/#{product}/#{location}")
end                  

@client 是一个用HTTPClient.new创建的实例,我已经配置好了。在传递''正确''参数时,它返回我想要的东西,所以它配置得很好。

我现在的问题是,当服务返回错误状态码时,会抛出HTTPClient::BadResponseError异常,我无法在响应变量中检索这个错误。

有没有办法从服务中获取响应,不管它返回的是哪种状态码?我试着使用 begin...rescue 我可以得到一些信息,如状态码和原因短语,但不能得到响应的内容(错误信息)。

ruby httpclient
1个回答
1
投票

你正在使用 get_content 它跳过几步并返回内容。相反,退一步,使用 get 它将返回一个更完整的响应结构,除其他外,包括 status 你想要的领域。

def stock(product, location)
  response = @client.get("stock/#{product}/#{location}")

  body = response.body
  status = response.status
end 
© www.soinside.com 2019 - 2024. All rights reserved.