gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:54:29 26 4
gpt4 key购买 nike

我正在尝试编写一个 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

我想从这个请求中获得两条信息:内容膨胀的总长度,以及(视情况而定)内容收缩的长度。

有时, header 会包含一个content-length 参数,它似乎是内容的压缩长度。我还可以使用 res.body.length 来估计内容的膨胀大小,但这并不是万无一失的。 net/http 上的文档说 gzip header 会自动从列表中删除(帮助 我,感谢)所以我似乎无法可靠地处理此信息.

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

最佳答案

明白了!此处的“魔术”行为仅在您未指定自己的 accept-encoding header 时才会发生。修改代码如下:

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),

关于ruby - 使用 ruby​​ 获取 URL 的内容长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4811829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com