首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过HTTP下载二进制文件?

如何通过HTTP下载二进制文件?
EN

Stack Overflow用户
提问于 2010-02-15 09:04:13
回答 6查看 135.7K关注 0票数 135

如何使用Ruby通过HTTP下载并保存二进制文件?

网址为http://somedomain.net/flv/sample/sample.flv

我在Windows平台上,我不想运行任何外部程序。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-02-15 09:09:29

最简单的方法是特定于平台的解决方案:

代码语言:javascript
复制
 #!/usr/bin/env ruby
`wget http://somedomain.net/flv/sample/sample.flv`

您可能正在搜索以下内容:

代码语言:javascript
复制
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:下载时保存部分文件的解决方案:

代码语言:javascript
复制
# 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
票数 148
EN

Stack Overflow用户

发布于 2010-02-15 09:15:28

Ruby的net/http documentation中的示例3展示了如何通过超文本传输协议下载文档,以及如何输出文件,而不是仅仅将其加载到内存中,而是将puts替换为对文件的二进制写入,例如,如Dejw的答案所示。

更复杂的情况在同一文档中进一步展示。

票数 29
EN

Stack Overflow用户

发布于 2013-11-07 22:59:05

下面的解决方案将首先将整个内容读取到内存,然后再将其写入磁盘(要获得更有效的i/o解决方案,请查看其他答案)。

您可以使用open-uri,它是一个一行程序。

代码语言:javascript
复制
require 'open-uri'
content = open('http://example.com').read

或使用net/http

代码语言:javascript
复制
require 'net/http'
File.write("file_name", Net::HTTP.get(URI.parse("http://url.com")))
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2263540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档