Class: HTTP::Client
Overview
Clients make requests and receive responses
Constant Summary collapse
- CONNECTION =
"Connection".freeze
- KEEP_ALIVE =
"Keep-Alive".freeze
- CLOSE =
"close".freeze
- HTTP_OR_HTTPS_RE =
%r{^https?://}i
Instance Attribute Summary collapse
-
#default_options ⇒ Object
readonly
Returns the value of attribute default_options.
Instance Method Summary collapse
- #close ⇒ Object
-
#initialize(default_options = {}) ⇒ Client
constructor
A new instance of Client.
- #make_request(req, options) ⇒ Object
-
#perform(req, options) ⇒ Object
Perform a single (no follow) HTTP request.
-
#request(verb, uri, opts = {}) ⇒ Object
Make an HTTP request.
Methods included from Chainable
#accept, #auth, #basic_auth, #connect, #default_headers, #default_headers=, #default_options=, #delete, #follow, #get, #head, #options, #patch, #persistent, #post, #put, #stream, #trace, #via, #with_cache, #with_headers
Constructor Details
#initialize(default_options = {}) ⇒ Client
Returns a new instance of Client.
23 24 25 26 27 |
# File 'lib/http/client.rb', line 23 def initialize( = {}) = HTTP::Options.new() @connection = nil @state = :clean end |
Instance Attribute Details
#default_options ⇒ Object (readonly)
Returns the value of attribute default_options.
21 22 23 |
# File 'lib/http/client.rb', line 21 def end |
Instance Method Details
#close ⇒ Object
91 92 93 94 95 |
# File 'lib/http/client.rb', line 91 def close @connection.close if @connection @connection = nil @state = :clean end |
#make_request(req, options) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/http/client.rb', line 61 def make_request(req, ) verify_connection!(req.uri) @state = :dirty @connection ||= HTTP::Connection.new(req, ) @connection.send_request(req) @connection.read_headers! res = Response.new( @connection.status_code, @connection.http_version, @connection.headers, Response::Body.new(@connection), req.uri ) @connection.finish_response if req.verb == :head @state = :clean res # On any exception we reset the conn. This is a safety measure, to ensure # we don't have conns in a bad state resulting in mixed requests/responses rescue close if .persistent? raise end |
#perform(req, options) ⇒ Object
Perform a single (no follow) HTTP request
55 56 57 58 59 |
# File 'lib/http/client.rb', line 55 def perform(req, ) .cache.perform(req, ) do |r, opts| make_request(r, opts) end end |
#request(verb, uri, opts = {}) ⇒ Object
Make an HTTP request
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/http/client.rb', line 30 def request(verb, uri, opts = {}) opts = .merge(opts) uri = make_request_uri(uri, opts) headers = opts.headers proxy = opts.proxy body = make_request_body(opts, headers) # Tell the server to keep the conn open if .persistent? headers[CONNECTION] = KEEP_ALIVE else headers[CONNECTION] = CLOSE end req = HTTP::Request.new(verb, uri, headers, proxy, body) res = perform req, opts return res unless opts.follow Redirector.new(opts.follow).perform req, res do |request| perform request, opts end end |