How to get HTTP headers before downloading with Ruby's OpenUri
http-headers, open-uri, ruby
Solution
It seems what I wanted is not possible to archieve using OpenURI, at least not, as I said, without loading the whole file first.
I was able to do what I wanted using Net::HTTP's `request_get`
Here an example:
http.request_get('/largefile.jpg') {|response|
if (response['content-length'] < max_length)
response.read_body do |str| # read body now
# save to file
end
end
}
Note that this only works when using a block, doing it like:
response = http.request_get('/largefile.jpg')
the body will already be read.
Problem
I am currently using OpenURI to download a file in Ruby. Unfortunately, it seems impossible to get the HTTP headers without downloading the full file: ``` 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'] } ``` Running the code above shows that it first downloads the full file and only then prints the header I need. Is there a way to get the headers before the full file is downloaded, so I can cancel the download if the headers are not what I expect them to be?