2011-08-03 11 views
1

タブを無効にします。私はリモートからローカルにファイルをダウンロードしようとしていますが、私はちょうど310バイトです(ダウンロードするファイルに関係なく)。私は0にタイムアウトを設定しようとしましたが、これは動作していません。私は間違って何をしていますか?ありがとう!Ruby - リモートファイルのダウンロード...タイムアウト?

 @downloadUrl = 'https://username:[email protected]' 
     Net::HTTP.start(@downloadUrl) do |http| 
      response = http.get('/file.ext') 
      open('/Users/me/file.ext', "wb", :read_timeout=>0) do |file| 
       file.write(response.body) 
      end 
     end 

編集:私はhttpclientを使用したくない、私は標準のnet/httpを使いたい。私はほとんどそこにいますが、私はNet::HTTP.start(url.path)に投げ込んでinitialize': getaddrinfo: nodename nor servname provided, or not known (SocketError)を得続けます。しかし、私はリモート "https"、私はECONNREFUSED取得します。 ...近くなってる?

url = URI.parse('https://api.net/file.ext') 
    @request = Net::HTTP.start(url.path) 
    @request.basic_auth 'username', 'password' 
    sock = Net::HTTP.new(url.host, 443) 
    sock.use_ssl = true 
    sock.ssl_version='SSLv3' 
    sock.start do |http| 
     response = http.get(@request) 
      open('/Users/me/file.ext', "wb", :read_timeout=>0) do |file| 
       file.write(response.body) 
      end 
    end 

答えて

0

SSLを使用してアクセスすると、httpclientを使用する方がはるかに簡単です。

gem install httpclient

私はこれを試していないが、これはあなたのために働く必要があります。ここにはrdocがあります。

require 'httpclient' 

domain = "https://api.net/file.ext" 
username = "username" 
password = "password" 

clnt = HTTPClient.new 
clnt.set_auth(domain, username, password) 

res = clnt.get_content(https_url) 

回答をファイルに保存するには"writing a binary file in ruby"質問を参照してください。

はあなたがNet::HTTP.start(url.host, url.port)代わりのNet:HTTP.start(url.path)をやるべきネット/ HTTP

を使用してを更新しました。 See RDoc for Net::HTTP.start

url = URI.parse("https://api.net/file.ext") 
download_file = opne("/Users/me/file.ext", "wb") 
request = Net::HTTP.start(url.host, url.port) 

# .. set basic auth, verify peer etc 

begin 
    request.request_get(url.path) do |resp| 
    resp.read_body { |segment| download_file.write(segment) } 
    end 
ensure 
    download_file.close 
end 
+0

ありがとうございますが、私は可能な限り標準的なネットを使いたいと思います!現在のtryのコードを更新しました(本質的に同じ新しいコードはget、post、deleteで動作します)。 –

+0

男、私はドキュメントのur.portを見逃してしまった!ありがとう! –