2013-10-17 8 views
0

ruby ​​스크립트를 사용하여 http 링크를 통해 .dmg 파일을 다운로드하려고합니다. 나는 NET :: HTTP 및 HTTParty 메서드를 http://www.ruby-doc.org/stdlib-2.0.0/libdoc/net/http/rdoc/Net/HTTP.html 에서 설명한 방법으로 시도했습니다. 이러한 메서드는 이미지 및 다른 웹 콘텐츠에서는 제대로 작동하지만 dmg 파일에서는 작동하지 않습니다.http 링크로 dmg 파일 다운로드

#!/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 파일을 얻는 방법.

+2

나는 이것이 당신이 로딩하는 내용과 관련이 있다고 생각하지 않습니다. 그거 확실해? – phoet

답변

1

system 그것을 실행합니다

→ 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 

실제 URL을 다운로드는 다음과 같이 작동합니다

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 } 
+0

감사합니다. 이러한 변경 작업을 할 수있는 곳. 나를 위해 0 바이트 tmp 파일을 반환합니다. – CtrlV

+0

확실히, 그것은 110MB 파일을 다운로드했다! – phoet

-1

시도 쉘 명령 wget 추천하고 내가이 리디렉션으로 인해 가정 루비

system('wget http://download.virtualbox.org/virtualbox/4.2.18/VirtualBox-4.2.18- 88780-OSX.dmg') 
0

나를 위해이 코드는 매력처럼 작동했습니다 :

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 
관련 문제