Sha256: cac305cf67f26c0be9da5534c32d4a4913ed660ad5aa0b45fc5619cd71f25854
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
require 'openssl/better_defaults' require 'net/https' class Okay module HTTP MethodError = Class.new(ArgumentError) RedirectLimitError = Class.new(StandardError) DEFAULT_REDIRECT_LIMIT = 10 # A mapping of HTTP request methods to Net::HTTP methods. # (Yay overlapping terminology.) # # Also, what are consistent APIs even? METHODS = { get: 'get_response', post: 'post_form', } def self.get(url, parameters = {}) send_request(METHODS[:get], url, parameters) end def self.post(url, parameters = {}) send_request(METHODS[:post], url, parameters) end private def self.send_request(http_method, url, parameters, limit = DEFAULT_REDIRECT_LIMIT) if limit <= 0 raise RedirectLimitError, "request exceeded redirect limit" end uri = URI.parse(url) uri.query = URI.encode_www_form(parameters) options = { use_ssl: (uri.scheme == 'https') } Net::HTTP.start(uri.host, uri.port, options) do |http| response = Net::HTTP.send(http_method, uri) case response when Net::HTTPSuccess response when Net::HTTPRedirection send_request(METHODS[:get], response['location'], parameters, limit - 1) else # This seemingly-innocent method raises an exception if the request # isn't successful. response.value end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
okay-1.0.0 | lib/okay/http.rb |