diff options
-rwxr-xr-x | lib/custodian/webfetch.rb | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/lib/custodian/webfetch.rb b/lib/custodian/webfetch.rb deleted file mode 100755 index 34052ca..0000000 --- a/lib/custodian/webfetch.rb +++ /dev/null @@ -1,161 +0,0 @@ -#!/usr/bin/ruby1.8 - - -require 'tempfile' - - -# -# This is a class which allows a remote HTTP/HTTPS page to be downloaded -# it allows both the content and the HTTP status-code to be retrieved assuming -# a success was made. -# -# This code is *horrificly* bad, but required because net/http doesn't honour -# timouts under certain circumstances. I'm not proud of this code. -# -# Steve -# -- -# -class WebFetch - - # - # The URL & timeout period (in seconds) we were given in the constructor - # - attr_reader :url, :timeout - - # - # The HTTP status code, and content, we received from fetching the URL - # - attr_reader :status, :text - - # - # An error to return to the caller, on failure - # - attr_reader :error - - - - # - # Constructor - # - def initialize( url, timeout = 10 ) - @url = url - @timeout = timeout - - # defaults - @status = -1 - @error = "" - @text = "" - end - - - - # - # Perform the fetch of the remote URL. Return "true" on success. - # - def fetch - - # - # Generate a temporary file to contain the header from the server. - # - tmp_head = Tempfile.new('curl-header') - head = tmp_head.path - - # - # Generate a temporary file to contain the body from the server. - # - tmp_body = Tempfile.new('curl-body') - body = tmp_body.path - - # - # Shell out to curl (!!!) to do the fetch. - # - # Avoid using the actual shell to avoid a security risk - # - system( "curl", - "--max-time", - timeout.to_s, - "--silent", - "--location", - "--insecure", - "--dump-header", - head, - "--out", - body, - "--silent", - @url ) - - - # - # If the header was empty then we're a failure. - # - # (A body might be legitimately empty.) - # - if ( File.size( head ) == 0 ) - - # - # Cleanup - # - File.unlink( body ) if ( File.exists?( body ) ) - File.unlink( head ) if ( File.exists?( head ) ) - - # - # Store the error. - # - @error = "Fetch of #{@url} failed" - return false - end - - - # - # Get the HTTP status code, by parsing the HTTP headers. - # - # NOTE: We will replace the code with later ones - this gives - # the status code *after* any potential redirection(s) have - # completed. - # - File.open( head, "r").each_line do |line| - if ( line =~ /HTTP\/[0-9]\.[0-9]\s+([0-9]+)\s+/ ) - @status = $1.dup - end - end - - # - # Get the body from the server, by parsing the temporary file. - # - File.open( body, "r").each_line do |line| - @text << line - end - - # - # Cleanup. We're done. - # - File.unlink( body ) if ( File.exists?( body ) ) - File.unlink( head ) if ( File.exists?( head ) ) - - return true - end - - - # - # Return the HTTP status code the server responded with, if the fetch was successful. - # - def status - @status - end - - # - # Return the HTTP content the server responded with, if the fetch was successful. - # - def content - @text - end - - # - # Return the error, if the fetch failed. - # - def error - @error - end - -end - |