Module: Net
- Defined in:
- lib/standard/facets/net/http.rb
Class Method Summary collapse
-
.download(url, limit = nil) ⇒ Object
Returns a response object for the given URL or raises an exception with the appropriate error status code if unable to complete the request.
-
.download_and_save(url, path = nil, options = {}) ⇒ Object
Downloads a given URL and saves it to disk at the specified path.
Class Method Details
.download(url, limit = nil) ⇒ Object
13 14 15 16 17 18 19 20 21 22 |
# File 'lib/standard/facets/net/http.rb', line 13 def self.download(url, limit = nil) limit ||= 10 raise ArgumentError, 'HTTP redirect too deep' if limit.zero? resp = Net::HTTP.get_response(URI.parse(url)) case resp when Net::HTTPSuccess then resp when Net::HTTPRedirection then download(resp['location'], limit - 1) else resp.error! end end |
.download_and_save(url, path = nil, options = {}) ⇒ Object
Downloads a given URL and saves it to disk at the specified path. If path is not provided or nil, then the last segment in the path of the URL is used as the file name.
Takes a third parameters as a hash of options:
-
limit
- passed to Net.download to limit number of redirects -
mode
, <tt>:open_args<tt>, etc - passed to File.write to save the file. For details on those options, see File.write# Saves robots.txt to PWD as robots.txt Net.download_and_save(‘example.com/robots.txt’)
# Saves robots.txt to PWD as example.txt Net.download_and_save(‘example.com/robots.txt’, ‘example.txt’)
# Saves robots.txt to PWD as robots.txt, and writes the result as binary Net.download_and_save(‘example.com/robots.txt’, nil, mode: ‘wb’)
CREDIT: Daniel Huckstep
43 44 45 46 47 48 49 |
# File 'lib/standard/facets/net/http.rb', line 43 def self.download_and_save(url, path = nil, = {}) opts = .dup path = File.(path || url.split('/').last) raise ArgumentError.new('Save path is a directory') if File.directory?(path) resp = download(url, opts.delete(:limit)) File.write(path, resp.body, opts) if resp.is_a?(Net::HTTPSuccess) end |