Ruby return 的 HTTPVersionNotSupported 对象
Ruby return's HTTPVersionNotSupported object
我正在尝试使用有效的 URL 字符串向我的服务发出获取请求(如果我将其放入浏览器,我会得到预期的响应)。但是,当我 运行 以下函数时:
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 为我们提供了解决此问题的绝佳工具:规范化。
规范化将您的 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 请求。
我正在尝试使用有效的 URL 字符串向我的服务发出获取请求(如果我将其放入浏览器,我会得到预期的响应)。但是,当我 运行 以下函数时:
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 为我们提供了解决此问题的绝佳工具:规范化。
规范化将您的 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 请求。