与其使用 Net::HTTP,这就像使用沙铲在海滩上挖一个水池一样,您可以使用一些用于 Ruby 的 HTTP 客户端并清理代码。
这是一个使用HTTParty的示例:
require 'httparty'
resp = HTTParty.head('http://example.org')
resp.headers
# => {"accept-ranges"=>["bytes"], "cache-control"=>["max-age=604800"], "content-type"=>["text/html"], "date"=>["Thu, 02 Mar 2017 18:52:42 GMT"], "etag"=>["\"359670651\""], "expires"=>["Thu, 09 Mar 2017 18:52:42 GMT"], "last-modified"=>["Fri, 09 Aug 2013 23:54:35 GMT"], "server"=>["ECS (oxr/83AB)"], "x-cache"=>["HIT"], "content-length"=>["1270"], "connection"=>["close"]}
此时很容易检查文档的大小:
resp.headers['content-length'] # => "1270"
不幸的是,您正在与之交谈的 HTTPd 可能不知道内容有多大。为了快速响应,服务器不一定要计算动态生成的输出的大小,这将花费几乎与实际发送它一样长的时间并且几乎与 CPU 密集型一样,因此依赖“内容长度”值可能是错误的。
Net::HTTP 的问题是它不会自动处理重定向,所以你必须添加额外的代码。当然,文档中提供了该代码,但是随着您需要做更多的事情,代码会不断增长,直到您最终编写另一个 http 客户端 (YAHC)。所以,避免这种情况并使用现有的轮子。