Ruby返回的HTTPVersionNotSupported对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ruby返回的HTTPVersionNotSupported对象相关的知识,希望对你有一定的参考价值。

我正在尝试使用有效的URL字符串向我的服务发出get请求(如果我将其放入浏览器,我会得到预期的响应)。但是,当我运行以下功能时:

def dispatch_uri(url)
  uri = Addressable::URI.parse(url)

  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Get.new(uri.request_uri)

  response = http.request(request).to_s
  response 
end

响应变量包含一个Net :: HTTPVersionNotSupported,它没有正文,当然也不是预期的响应。

我做错了什么,我应该如何解决这个问题?

答案

所以,答案比我想象的要简单。

Net :: HTTP无法使用UTF-8 URL或Addressable :: URI,但是,Addressable为我们提供了解决此问题的绝佳工具:normalize。

Normalize将您的UTF = 8转换为编码的ASCII html兼容字符串,因此工作代码为:

def dispatch_uri(url)
  uri = URI(Addressable::URI.parse(url).normalize.to_s)
  response = Net::HTTP.get(uri)
  response
end

此规范化字符串可用于创建标准URI对象,因此,您可以使用常规Net :: HTTP请求。

以上是关于Ruby返回的HTTPVersionNotSupported对象的主要内容,如果未能解决你的问题,请参考以下文章

如何修复ruby中返回的不匹配对象类型?

Ruby (Shoes) - 等待函数返回值

使用辅助方法和 Ruby 可枚举返回 html 格式的对象

Ruby - 失败语句/保护条件返回 nil

如何在 Ruby 中返回数组的一部分?

如何确保方法返回一个数组,即使 Ruby 中只有一个元素