module HTTPI
HTTPI
¶ ↑
Executes HTTP requests using a predefined adapter. All request methods accept an HTTPI::Request
and an optional adapter. They may also offer shortcut methods for executing basic requests. Also they all return an HTTPI::Response
.
GET¶ ↑
request = HTTPI::Request.new("http://example.com") HTTPI.get(request, :httpclient)
Shortcuts¶ ↑
HTTPI.get("http://example.com", :curb)
POST¶ ↑
request = HTTPI::Request.new request.url = "http://example.com" request.body = "<some>xml</some>" HTTPI.post(request, :httpclient)
Shortcuts¶ ↑
HTTPI.post("http://example.com", "<some>xml</some>", :curb)
HEAD¶ ↑
request = HTTPI::Request.new("http://example.com") HTTPI.head(request, :httpclient)
Shortcuts¶ ↑
HTTPI.head("http://example.com", :curb)
PUT¶ ↑
request = HTTPI::Request.new request.url = "http://example.com" request.body = "<some>xml</some>" HTTPI.put(request, :httpclient)
Shortcuts¶ ↑
HTTPI.put("http://example.com", "<some>xml</some>", :curb)
DELETE¶ ↑
request = HTTPI::Request.new("http://example.com") HTTPI.delete(request, :httpclient)
Shortcuts¶ ↑
HTTPI.delete("http://example.com", :curb)
More control¶ ↑
If you need more control over your request, you can access the HTTP client instance represented by your adapter in a block.
HTTPI.get request do |http| http.follow_redirect_count = 3 # HTTPClient example end
mostly verbatim from: github.com/rack/rack/blob/main/lib/rack/headers.rb Because this is part of httpi’s public API, its better not to load an external library for it.
Constants
- DEFAULT_LOG_LEVEL
- DimeRecord
- REQUEST_METHODS
- VERSION
Attributes
Sets whether to log HTTP requests.
Sets the log level.
Sets the logger to use.
Public Class Methods
Shortcut for setting the default adapter to use.
# File lib/httpi.rb, line 175 def adapter=(adapter) Adapter.use = adapter end
# File lib/httpi.rb, line 179 def adapter_client_setup=(block) Adapter.client_setup_block = block end
Executes an HTTP DELETE request.
# File lib/httpi.rb, line 150 def delete(request, adapter = nil, &block) request = Request.new(request) if request.kind_of? String request(:delete, request, adapter, &block) end
Executes an HTTP GET request.
# File lib/httpi.rb, line 126 def get(request, adapter = nil, &block) request = Request.new(request) if request.kind_of? String request(:get, request, adapter, &block) end
Executes an HTTP HEAD request.
# File lib/httpi.rb, line 138 def head(request, adapter = nil, &block) request = Request.new(request) if request.kind_of? String request(:head, request, adapter, &block) end
Logs a given message
.
# File lib/httpi/logger.rb, line 32 def log(message) logger.send(log_level, message) if log? end
Returns whether to log HTTP requests. Defaults to true
.
# File lib/httpi/logger.rb, line 11 def log? @log != false end
Returns the log level. Defaults to :debug.
# File lib/httpi/logger.rb, line 27 def log_level @log_level ||= DEFAULT_LOG_LEVEL end
Returns the logger. Defaults to an instance of Logger
writing to STDOUT.
# File lib/httpi/logger.rb, line 19 def logger @logger ||= ::Logger.new($stdout) end
Executes an HTTP POST request.
# File lib/httpi.rb, line 132 def post(*args, &block) request, adapter = request_and_adapter_from(args) request(:post, request, adapter, &block) end
Executes an HTTP PUT request.
# File lib/httpi.rb, line 144 def put(*args, &block) request, adapter = request_and_adapter_from(args) request(:put, request, adapter, &block) end
# File lib/httpi.rb, line 106 def query_builder @query_builder ||= HTTPI::QueryBuilder::Flat end
# File lib/httpi.rb, line 110 def query_builder=(builder) if builder.is_a?(Symbol) builder_name = builder.to_s.capitalize begin builder = HTTPI::QueryBuilder.const_get(builder_name) rescue NameError raise ArgumentError, "Invalid builder. Available builders are: [:flat, :nested]" end end unless builder.respond_to?(:build) raise ArgumentError, "Query builder object should respond to build method" end @query_builder = builder end
Executes an HTTP request for the given method
.
# File lib/httpi.rb, line 156 def request(method, request, adapter = nil, redirects = 0) adapter_class = load_adapter(adapter, request) Adapter.client_setup_block.call(adapter_class.client) if Adapter.client_setup_block yield adapter_class.client if block_given? log_request(method, request, Adapter.identify(adapter_class.class)) response = adapter_class.request(method) if response && HTTPI::Response::RedirectResponseCodes.member?(response.code) && request.follow_redirect? && redirects < request.redirect_limit request.url = URI.join(request.url, response.headers['location']) log("Following redirect: '#{request.url}'.") return request(method, request, adapter, redirects + 1) end response end
Reset the default config.
# File lib/httpi/logger.rb, line 37 def reset_config! @log = nil @logger = nil @log_level = nil end
Protected Class Methods
# File lib/httpi/logger.rb, line 45 def log_request(method, request, adapter) log("HTTPI #{request_ssl_info(request)} #{method.to_s.upcase} request to #{request.url.host} (#{adapter})") end
# File lib/httpi/logger.rb, line 49 def request_ssl_info(request) if request.auth && request.auth.ssl "#{request.auth.ssl.ssl_version}/#{request.auth.ssl.verify_mode}" end end
Private Class Methods
# File lib/httpi.rb, line 190 def load_adapter(adapter, request) Adapter.load(adapter).new(request) end
# File lib/httpi.rb, line 185 def request_and_adapter_from(args) return args if args[0].kind_of? Request [Request.new(:url => args[0], :body => args[1]), args[2]] end