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?

Original source

Related problems