有没有办法在 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
我正在使用 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