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

标签 ruby httpclient

我正在使用 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/

相关文章:

ruby - 如何在ruby中提取方括号内的内容

android - Xamarin 安卓 : How do i open add header and send post request in webview

c# - 使用 HTTPClient 进行双向身份验证

Android HTTPPost 返回错误 "Method not allowed."

ruby-on-rails - 使用 send_file 从 Amazon S3 下载文件?

sql - 从 Ruby on Rails 调用数据库过程

ruby - Nokogiri 未定义方法 'attribute' nilClass

ruby - 如何在 Chef LWRP 定义中实现动态属性默认值

c# - 如何修复应用服务中的 SNAT 耗尽问题

java - HttpClient:我可以通过多个线程为不同的域安全地重用 HttpContext 吗?