2011-03-21 1 views
4

RubyGem Curb로 파일 다운로더를 빌드하려고합니다. (This Question을보십시오.)파일 구조의 실제 Zip 파일로 CURL을 통해 Zip 파일을 다운로드하십시오.

나는 zip 파일을 다운로드하려고하는데, File 클래스를 사용하여 Finder에서 파일을 두 번 클릭 할 수 있도록 파일을 실제로 만들려고합니다 (OS X). 이 "컬링 된"몸체를 zip 파일로 변환하려면 어떻게해야합니까?

require 'rubygems' 
require 'curb' 

class Download 
    def start 
    curl = Curl::Easy.new('http://wordpress.org/latest.zip') 
    curl.perform 
    curl.on_body { 
     |d| f = File.new('test.zip', 'w') {|f| f.write d} 
    } 
    end 
end 

dl = Download.new 
dl.start 

오류가 나타나지 않으며 어떤 파일도 찾을 수 없습니다. 나는 아무런 차이없이 절대 경로를 시도했다.

+1

본문을 전송하는'perform'을 호출 한 후에'on_body' 이벤트를 추가하고 있습니다. 'curl.perform'을 호출하기 전에 이벤트를 생성하면 코드가 작동합니까? –

+0

아 물론 나는'perform' 전에'on_body'를 호출해야합니다. 또한 File.new 매개 변수를 ''a ''로 변경해야했습니다. – maetthew

+0

고쳐 주셔서 고맙습니다. 다른 사람들이 쉽게 해결책을 찾을 수 있도록 답장으로 추가하겠습니다 :) –

답변

2

으로 전화를 걸어 on_body 이벤트를 추가하면 본문이 전송됩니다. 이벤트 선언을 perform 호출 전에 이동하면이 방법이 효과적입니다. 내가 루비 2.0

내 코드를 사용하고

4

은 다음과 같습니다

curl = Curl::Easy.new('http://somepage.cz/index.html') 
curl.on_body do |d| 
    f = File.open('output_file.html', 'w') {|f| f.write(d)} 
end 
curl.perform 

내가이 일을하고 있지 않습니다없이 File.open-File.new을 변경했다. 결국 curl.perfom을 이동하면 도움이되었습니다.