我正在使用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
我可以得到一些信息,如状态码和原因短语,但不能得到响应的内容(错误信息)。
你正在使用 get_content
它跳过几步并返回内容。相反,退一步,使用 get
它将返回一个更完整的响应结构,除其他外,包括 status
你想要的领域。
def stock(product, location)
response = @client.get("stock/#{product}/#{location}")
body = response.body
status = response.status
end