我正在使用 HTTPClient
ruby 库向我开发的 REST 服务发出一些基本的 http 请求,我现在想知道发生错误时如何从服务获取响应(a从服务返回 400 或 500 等状态代码)。
我的服务所做的是返回中心中产品的库存,因此它需要两个参数(在网址中):产品 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
关于ruby - 有没有办法在 Ruby 中使用 HTTPClient 获取错误响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62398396/