使用 ruby​​ 获取 URL 的内容长度

2024-05-07

我正在尝试编写一个 ruby​​ 脚本,该脚本使用以下命令获取有关网站上文件的一些详细信息net/http。我的代码如下所示:

require 'open-uri'
require 'net/http'

url = URI.parse asset
res = Net::HTTP.start(url.host, url.port) {|http|
  http.get(asset)
} 

headers = res.to_hash
p headers

我想从这个请求中获取两条信息:膨胀内容的总长度,以及(酌情)缩小内容的长度。

有时,标题会包含content-length参数,它似乎是内容的 gzip 压缩长度。我还可以使用 res.body.length 来估算内容的膨胀大小,但这并不是万无一失的。有关的文档net/http表示 gzip 标头会自动从列表中删除(以help我,天哪,谢谢)所以我似乎无法可靠地处理这些信息。

感谢任何帮助(包括其他宝石,如果他们能更轻松地做到这一点)。


知道了!仅当您未指定自己的接受编码标头时,才会发生此处的“神奇”行为。修改后的代码如下:

require 'open-uri'
require 'net/http'
require 'date'
require 'zlib' 

headers = { "accept-encoding" => "gzip;q=1.0,deflate;q=0.6,identity;q=0.3" }
url = URI.parse asset
res = Net::HTTP.start(url.host, url.port) {|http|
  http.get(asset, headers)
}

headers = res.to_hash

gzipped = headers['content-encoding'] && headers['content-encoding'][0] == "gzip"
content = gzipped ? Zlib::GzipReader.new(StringIO.new(res.body)).read : res.body 


full_length = content.length,
compressed_length = (headers["content-length"] && headers["content-length"][0] || res.body.length), 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ruby​​ 获取 URL 的内容长度 的相关文章

随机推荐