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

Is there a way to get response on error with HTTPClient in Ruby?

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

我的服务所做的是 return 一个中心的产品库存,因此它需要两个参数(在 url 中):一个产品 ID 和一个中心 ID。当我通过正确的产品和中心 ID 调用此服务时,服务 return 向我发送 200 - OK 状态和产品库存(例如,8.0 表示其中有 8 个产品单位中央)。但是,如果我传递了错误的产品 ID(不在我们的数据库中),服务 returns 400 - Bad Request 和一条错误消息表明该 ID 不存在。

所以我在Ruby

中有一个类似下面的方法
def stock(product, location)
   response = @client.get_content("stock/#{product}/#{location}")
end                  

@client是我配置的用HTTPClient.new创建的实例。在传递“'right'”参数时,它 return 是我想要的,所以它配置得很好

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

有没有办法从服务中获取响应,无论它 return 是哪个状态代码?我尝试使用 begin...rescue,我可以获得一些信息,例如状态代码和原因短语,但不是响应的内容(错误消息)

您正在使用 get_content,它跳过了几个步骤并 return 了内容。而是退后一步并使用 get,这将 return 一个更完整的响应结构,其中包括您想要的 status 字段:

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

  body = response.body
  status = response.status
end