Class: Toolbox::Http
- Inherits:
-
Object
- Object
- Toolbox::Http
- Defined in:
- lib/toolbox/http.rb
Overview
A simple testing client based on the Perl version found in:
https://github.com/gradeawarrior/QA-Perl-Lib/blob/master/QA/Test/WebService.pm
An example usage would be the following:
require 'toolbox/http'
response = Toolbox::Http.request(:method => 'GET', :url => 'http://www.google.com')
if response.code == 200.to_s
puts "Yay! It worked!"
else
puts "Boo! Something broke!" unless response.code == 200.to_s
end
Class Method Summary collapse
-
.generate_curl_request(uri, request) ⇒ Object
Generate and display curl request.
-
.request(*args) ⇒ Object
A simple testing client based on the Perl version found in:.
-
.show_req(uri, request, disable_print_body = false) ⇒ Object
Show details about request.
-
.show_response(response, disable_print_body = false) ⇒ Object
Show details about response received.
Class Method Details
.generate_curl_request(uri, request) ⇒ Object
Generate and display curl request
== Parameters uri : The URI you are performing the request on request : The Net::HTTP Request object
== Returns curl_request : String representing the curl request
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/toolbox/http.rb', line 43 def self.generate_curl_request(uri, request) curl_request_str = "curl -v -X #{request.method} \"#{uri.scheme}://#{uri.host}:#{uri.port}#{request.path}\"" # Generate headers request.each_header do |name, value| curl_request_str += " -H '#{name}: #{value}'" if (name !~ /user-agent/i && name !~ /accept/i) end curl_request_str += " -k" if (uri.scheme.to_s == "https") curl_request_str += " -d 'YOUR_REQUEST_BODY'" if state.nil? && state.get(:curl_file).nil? curl_request_str += " -d @#{state.get(:curl_file)}" if !state.nil? && !state.get(:curl_file).nil? curl_request_str end |
.request(*args) ⇒ Object
A simple testing client based on the Perl version found in:
https://github.com/gradeawarrior/QA-Perl-Lib/blob/master/QA/Test/WebService.pm
== Parameters :method => (Required) Sets the request method to perform. The valid methods are GET, POST, PUT, & DELETE :url => (Required) This should be set to the exact service API (e.g. 'http://www.google.com'). Port, path, and query parameters should also be specified. NOTE: If you specified the :request option, then the URI path and query parameters will be configured there. :request => (Optional) Default: nil - You can optionally setup your Net::HTTP::[Get|Post|Put|Delete] operation here. Other request could also be specified here if not supported via :method parameter. :timeout => (Optional) Default: 60 - This is the default request timeout :basic_auth => (Optional) Default: nil - This should be a hash containing 'user' and 'password' keys :headers => (Optional) Default: {} - A Hash containing all the Request headers that need to be set :request_body => (Optional) Default: nil - The request body for PUT and POST requests :content_type => (Optional) Default: nil - Sets the 'Content-Type' header :debug => (Optional) Default: false - Enables debug output :disable_print_body => (Optional) Default: false - This will hide the request/response body output
== Returns
A Net::HTTPResponse object is returned. This is the standard object returned from Net::HTTP
== Throws (Exceptions)
Any of the standard Net::HTTP::Exceptions could be returned if there is an error connecting to the downstream server.
Additionally, The method could return:
- ArgumentError
- URI parse error
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/toolbox/http.rb', line 144 def self.request(*args) args = args.nil? || args.empty? ? {} : args.pop args = {} unless args.is_a?(::Hash) raise ArgumentError, 'method is required!' if args[:method].nil? && args[:request].nil? raise ArgumentError, 'url is required!' if args[:url].nil? ## Options and defaults request = args[:request] args[:method] = request.method if request args[:timeout] = args[:timeout] ? args[:timeout] : 60 args[:headers] = args[:headers] ? args[:headers] : {} args[:headers]['Content-Type'] = args[:content_type] if args[:content_type] args[:debug] = args[:debug].nil? ? false : args[:debug].to_bool args[:disable_print_body] = args[:disable_print_body].nil? ? false : args[:disable_print_body].to_bool puts "Requesting: #{args[:method]} #{uri.to_s}" if args[:debug] ## Set the request based on the URL if args[:url] uri = args[:url].is_a?(::URI) ? args[:url] : URI(args[:url]) request_path = "#{uri.path}#{uri.query || ''}" request_path = request_path.empty? ? '/' : request_path if args[:method] request = case args[:method] when 'GET' Net::HTTP::Get.new(request_path, args[:headers]) when 'POST' req = Net::HTTP::Post.new(request_path, args[:headers]) req.body = args[:request_body] if args[:request_body] req when 'PUT' req = Net::HTTP::Put.new(request_path, args[:headers]) req.body = args[:request_body] if args[:request_body] req when 'DELETE' Net::HTTP::Delete.new(request_path, args[:headers]) else raise ArgumentError, "Invalid method #{args[:method]}!" end end end ## Set Auth req.basic_auth(args[:basic_auth]['user'], args[:basic_auth]['password']) if args[:basic_auth] http = Net::HTTP.new(uri.host, uri.port) http.read_timeout = args[:timeout] if uri.scheme == 'https' raise RuntimeError, 'SSL required but not available!' unless $SSL_AVAILABLE http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE end show_req(uri, request, state) if args[:debug] response = http.request(request) show_response(response) if args[:debug] response end |
.show_req(uri, request, disable_print_body = false) ⇒ Object
Show details about request
== Parameters uri : The URI you are performing the request on request : The Net::HTTP Request object disable_print_body : Disables printing body
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/toolbox/http.rb', line 65 def self.show_req(uri, request, disable_print_body=false) ## Print verbose output from RESTest puts "$ #{generate_curl_request(uri, request)}" puts '---[ Request ]----------------------------------------------------' puts "URI: #{uri.scheme}://#{uri.host}:#{uri.port}" puts "#{request.method} #{request.path}" request.each_header { |name, value| puts "#{name}: #{value}" } if disable_print_body puts "\n<!-- Disabled print body for Content-Type: #{request.content_type}-->\n" else puts "\n#{request.body}\n" end puts '------------------------------------------------------------------' end |
.show_response(response, disable_print_body = false) ⇒ Object
Show details about response received
== Parameters response : The Net::HTTPResponse object disable_print_body : Disables printing body
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/toolbox/http.rb', line 90 def self.show_response(response, disable_print_body=false) puts '---[ Response ]---------------------------------------------------' if response puts "#{response.code} #{response.}" if (response.code.to_i > 0) response.each_header { |name, value| puts "#{name}: #{value}" } end if disable_print_body puts "\n<!-- Disabled print body for Content-Type: #{request.content_type}-->\n" else puts "\n#{response.body}\n" end else puts 'response object is nil!' end puts '------------------------------------------------------------------' end |