请原谅选项卡。我正在尝试将文件从远程下载到本地,并且我不断收到一个正好是310字节的文件(无论我选择下载哪个文件)。我尝试将超时设置为0,但这不起作用。我究竟做错了什么?谢谢!
@downloadUrl = 'https://username:password@api.net'
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。我几乎在那里,但我不断向initialize': getaddrinfo: nodename nor servname provided, or not known (SocketError)
投掷Net::HTTP.start(url.path)
。但当我远程“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 :(得分: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
您应该Net::HTTP.start(url.host, url.port)
而不是Net:HTTP.start(url.path)
。 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