Net/http and binary files

I’m using the code from the example
http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html for the
http/net library:

File.open('result.txt', 'w') {|f|
  http.get('/~foo/') do |str|
    f.write str
  end
}

This works fine for html files. But for binary files the result is a
corrupted file.
I’ve run this in the console:

Net::HTTP.start(‘localhost’, 80){|http|File.open(‘result.mp3’, ‘w’){|f|http.g
et(‘/crocodil2/adrian.mp3’) {|str|f.write str}}}
=> #<Net::HTTPOK 200 OK readbody=true>

The mp3 files is corrupted. It does not seem to be base64 encoded…
help please.

Constantin G. wrote:

I’m using the code from the example
http://www.ruby-doc.org/stdlib/libdoc/net/http/rdoc/index.html
This works fine for html files. But for binary files the result is a
corrupted file.
I’ve run this in the console:

Net::HTTP.start(‘localhost’, 80){|http|File.open(‘result.mp3’, ‘w’){|f|http.g
et(‘/crocodil2/adrian.mp3’) {|str|f.write str}}}
=> #<Net::HTTPOK 200 OK readbody=true>
The mp3 files is corrupted. It does not seem to be base64 encoded…
help please.

The example works on *nix systems, but on Windoze, you must write the
file in binary mode: File.open(‘result.mp3’, ‘wb’)

Clifford H…

Clifford H. wrote:

The example works on *nix systems, but on Windoze, you must write the
file in binary mode: File.open(‘result.mp3’, ‘wb’)

Wonderful. Forgot about that… Thank you.