gpt4 book ai didi

Ruby:根据内容长度中止 OpenURI

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

鲁比的 OpenURI提供一个 content_length_proc 选项,允许在实际传输开始之前确定*内容长度:

open(url, :content_length_proc => lambda { |content_length|
puts "Content Length: #{content_length}"
}) { |data|
# data.meta, data.read etc.
}

有没有办法让这个过程中止实际的、完整的检索?

* 我知道这是不可靠的——但在我的案例中这对于简单的启发式方法来说已经足够了

最佳答案

这是来自 open-uri.rb 的相应代码:

if options[:content_length_proc] && Net::HTTPSuccess === resp
if resp.key?('Content-Length')
options[:content_length_proc].call(resp['Content-Length'].to_i)
else
options[:content_length_proc].call(nil)
end
end
resp.read_body {|str|
...
}

如您所见,content_length_proc 的返回值被忽略了。但是,您可以简单地取消操作,在回调中引发某种形式的错误——这将有效地中止进一步的执行。如果你提出一个专门的错误类,你甚至可以挽救它并对特定情况使用react:

begin
open(url, :content_length_proc => lambda { |content_length|
puts "Content Length: #{content_length}"
}) { |data|
# data.meta, data.read etc.
}
rescue MyError
# react to it
end

关于Ruby:根据内容长度中止 OpenURI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7023725/

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