如何使用Ruby通过HTTP下载并保存二进制文件?
网址为http://somedomain.net/flv/sample/sample.flv
。
我在Windows平台上,我不想运行任何外部程序。
发布于 2010-02-15 09:09:29
最简单的方法是特定于平台的解决方案:
#!/usr/bin/env ruby
`wget http://somedomain.net/flv/sample/sample.flv`
您可能正在搜索以下内容:
require 'net/http'
# Must be somedomain.net instead of somedomain.net/, otherwise, it will throw exception.
Net::HTTP.start("somedomain.net") do |http|
resp = http.get("/flv/sample/sample.flv")
open("sample.flv", "wb") do |file|
file.write(resp.body)
end
end
puts "Done."
编辑:已更改。谢谢。
Edit2:下载时保存部分文件的解决方案:
# instead of http.get
f = open('sample.flv')
begin
http.request_get('/sample.flv') do |resp|
resp.read_body do |segment|
f.write(segment)
end
end
ensure
f.close()
end
发布于 2010-02-15 09:15:28
Ruby的net/http documentation中的示例3展示了如何通过超文本传输协议下载文档,以及如何输出文件,而不是仅仅将其加载到内存中,而是将puts替换为对文件的二进制写入,例如,如Dejw的答案所示。
更复杂的情况在同一文档中进一步展示。
发布于 2013-11-07 22:59:05
下面的解决方案将首先将整个内容读取到内存,然后再将其写入磁盘(要获得更有效的i/o解决方案,请查看其他答案)。
您可以使用open-uri,它是一个一行程序。
require 'open-uri'
content = open('http://example.com').read
或使用net/http
require 'net/http'
File.write("file_name", Net::HTTP.get(URI.parse("http://url.com")))
https://stackoverflow.com/questions/2263540
复制相似问题