【发布时间】:2013-07-01 13:18:03
【问题描述】:
我目前正在使用 OpenURI 在 Ruby 中下载文件。不幸的是,如果不下载完整文件,似乎不可能获取 HTTP 标头:
open(base_url,
:content_length_proc => lambda {|t|
if t && 0 < t
pbar = ProgressBar.create(:total => t)
end
},
:progress_proc => lambda {|s|
pbar.progress = s if pbar
}) {|io|
puts io.size
puts io.meta['content-disposition']
}
运行上面的代码表明它首先下载了完整的文件,然后才打印我需要的标题。
有没有办法在下载完整文件之前获取标题,所以如果标题不是我期望的那样,我可以取消下载?
【问题讨论】:
-
@Kira 不,使用链接的答案将首先下载完整文件,这正是我不想要的。
-
打开不会将整个响应加载到内存中。事实上,它会这样做,但仅适用于小于或等于 10240 字节的响应。较大的响应将流式传输到
Tempfile。您可以使用这些知识来实际访问临时文件并使用它来做精益工作。除非您愿意,否则内存中什么也没有发生。在这里查看我的答案:stackoverflow.com/questions/2263540/… 但是如果您只想访问标头,则不应使用open,因为它总是会读取响应。下面的答案很好。
标签: ruby http-headers open-uri