首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过http链接下载dmg文件

通过http链接下载dmg文件
EN

Stack Overflow用户
提问于 2013-10-17 20:42:18
回答 3查看 608关注 0票数 0

我正在尝试使用ruby脚本通过http链接下载一个.dmg文件。我尝试过NET::http://www.ruby-doc.org/stdlib-2.0.0/libdoc/net/http/rdoc/Net/HTTP.html描述的HTTP和http://www.ruby-doc.org/stdlib-2.0.0/libdoc/net/http/rdoc/Net/HTTP.html方法,这些方法可以很好地处理图像和其他web内容,但不适用于dmg文件。

代码语言:javascript
复制
#!/usr/bin/env ruby

require 'fileutils'
require 'pathname'
require "open-uri"
require 'net/http'
include FileUtils

#download Software

#Method1
open("VirtualBox-4.2.18-88780-OSX.dmg") do |file|
 file.write('http://download.virtualbox.org/virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg').read
end

#Method2
Net::HTTP.start("download.virtualbox.org") do |http|
resp = http.get("/virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg")
open("VirtualBox-4.2.18-88780-OSX.dmg","wb") do |file|
file.write(resp)
end
end

#Method3
uri = URI('http://download.virtualbox.org/virtualbox/4.2.18/VirtualBox-4.2.18-88780-    OSX.dmg')
Net::HTTP.get(uri)

#Method4
Net::HTTP.start(uri.host) do |http|
request = Net::HTTP::Get.new uri
response = http.request request # Net::HTTPResponse object
end

#Method5
File.open("~/Desktop/", "wb") do |f| 
f.write HTTParty.get("http://download.virtualbox.org/virtualbox/4.2.18/VirtualBox-4.2.18- 88780-OSX.dmg").parsed_response
end

#Method6
File.write('VirtualBox-4.2.18-88780-OSX.dmg',         open('http://download.virtualbox.org/virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg').read,  {mode: 'wb'})

#Methos7
puts "#{uri}"
res = Net::HTTP.get_response(uri)
puts res.body if res.is_a?(Net::HTTPSuccess)

如何通过http链接获取dmg文件。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-17 20:57:19

我认为这是由于重定向造成的:

代码语言:javascript
复制
→ curl -I http://download.virtualbox.org/virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg
HTTP/1.1 302 Moved Temporarily
Location: http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg

→ curl -I http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg
HTTP/1.1 200 OK
Content-Length: 110667450

下载真正的网址如下所示:

代码语言:javascript
复制
require 'net/http'
url = "http://dlc.sun.com.edgesuite.net/virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg"
File.open('tmp.dmg', 'w') { |f| f.write Net::HTTP.get_response(URI.parse(url)).body }
票数 1
EN

Stack Overflow用户

发布于 2013-10-17 22:42:33

对我来说,这段代码很有魅力:

代码语言:javascript
复制
Net::HTTP.start("dlc.sun.com.edgesuite.net") do |http|
begin
file = open("VirtualBox-4.2.18-88780-OSX.dmg", 'wb')
http.request_get('/' + URI.encode("virtualbox/4.2.18/VirtualBox-4.2.18-88780-OSX.dmg")) do  |response|
  response.read_body do |segment|
    file.write(segment)
  end
end
ensure  
end 
end 
票数 0
EN

Stack Overflow用户

发布于 2013-10-17 20:49:47

尝试类似于wget的shell命令,并在Ruby中使用system执行它

代码语言:javascript
复制
system('wget http://download.virtualbox.org/virtualbox/4.2.18/VirtualBox-4.2.18- 88780-OSX.dmg')
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19436869

复制
相关文章

相似问题

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