2017-05-30 54 views
0

我是新来的红宝石,我正在学习它。ruby​​代码从基本认证的URL下载文件

我期待从一个网址下载文件(例如:https://myurl.com/123/1.zip),并带有基本认证。我试图执行以下Ruby脚本,从Windows命令提示符下..

require 'net/http' 

uri = URI('https://myurl.com/123/1.zip') 


Net::HTTP.start(uri.host, uri.port, 
    :use_ssl => uri.scheme == 'https', 
    :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http| 

    request = Net::HTTP::Get.new uri.request_uri 
    request.basic_auth '[email protected]', 'John123' 

    response = http.request request # Net::HTTPResponse object 

    puts response 

    puts response.body 
end 

当我执行该脚本,我看不出有什么错误,但该文件没有下载。您能否请我更正我的代码

+1

要打印的响应。而是将其写入文件。 https://gist.github.com/wbinglee/6f8ed65dded41fb9ccb2 – Sajin

回答

0

您几乎在那里。只需使用Ruby的SEND_DATA方法

require 'net/http' 

uri = URI('https://myurl.com/123/1.zip') 

Net::HTTP.start(uri.host, uri.port, 
    :use_ssl => uri.scheme == 'https', 
    :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |http| 

    request = Net::HTTP::Get.new uri.request_uri 
    request.basic_auth '[email protected]', 'John123' 

    http.request(request) do |response| 
    send_data(response.body, filename: 'set_filename.pdf') 
    end 
end 
+0

这给出了一个错误'NoMethodError:undefined method'send_data'' – Clintm

1

你可以试试这个:

require 'open-uri' 

File.open('/path/your.file', "wb") do |file| 
    file.write open('https://myurl.com/123/1.zip', :http_basic_authentication => ['[email protected]', 'John123']).read 
end