Class: Manticore::Client
- Inherits:
-
Object
- Object
- Manticore::Client
- Includes:
- ProxiesInterface
- Defined in:
- lib/manticore/client.rb,
lib/manticore/client/proxies.rb,
lib/manticore/client/trust_strategies.rb
Overview
Core Manticore client, with a backing PoolingHttpClientConnectionManager
Defined Under Namespace
Modules: ProxiesInterface, TrustStrategies Classes: AsyncProxy, BackgroundProxy, BaseProxy, CombinedTrustStrategy, CustomTrustStrategy, StubProxy
Constant Summary collapse
- DEFAULT_MAX_POOL_SIZE =
The default maximum pool size for requests
50
- DEFAULT_REQUEST_TIMEOUT =
60
- DEFAULT_SOCKET_TIMEOUT =
10
- DEFAULT_CONNECT_TIMEOUT =
10
- DEFAULT_MAX_REDIRECTS =
5
- DEFAULT_EXPECT_CONTINUE =
false
- DEFAULT_STALE_CHECK =
false
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
Class Method Summary collapse
Instance Method Summary collapse
-
#clear_pending ⇒ Object
Remove all pending asynchronous requests.
-
#clear_stubs! ⇒ Object
Wipe all currently-set stubs.
-
#close(await: nil) ⇒ Object
Release resources held by this client, namely: - close the internal http client - shutdown the connection pool - stops accepting async requests in the executor.
-
#delete(url, options = {}, &block) ⇒ Response
Perform a HTTP DELETE request.
-
#execute! ⇒ Array
Execute all queued async requests.
-
#executor ⇒ Object
Get at the underlying ExecutorService used to invoke asynchronous calls.
-
#get(url, options = {}, &block) ⇒ Response
Perform a HTTP GET request.
-
#head(url, options = {}, &block) ⇒ Response
Perform a HTTP HEAD request.
-
#http(method, url, options = {}, &block) ⇒ Response
Perform an HTTP request, passing the method as a parameter.
-
#initialize(options = {}) {|builder, request_config| ... } ⇒ Client
constructor
Create a new HTTP client with a backing request pool.
-
#options(url, options = {}, &block) ⇒ Response
Perform a HTTP OPTIONS request.
-
#patch(url, options = {}, &block) ⇒ Response
Perform a HTTP PATCH request.
-
#pool_stats ⇒ Object
Return a hash of statistics about this client’s HTTP connection pool.
-
#post(url, options = {}, &block) ⇒ Response
Perform a HTTP POST request.
-
#put(url, options = {}, &block) ⇒ Response
Perform a HTTP PUT request.
-
#stub(url, stubs) ⇒ Object
Cause this client to return a stubbed response for this URL.
-
#unstub(url) ⇒ Object
Cause this client to unstubbed previously-stubbed URL.
Methods included from ProxiesInterface
#async, #background, #respond_with
Constructor Details
#initialize(options = {}) {|builder, request_config| ... } ⇒ Client
Create a new HTTP client with a backing request pool. if you pass a block to the initializer, the underlying HttpClientBuilder and RequestConfig.Builder will be yielded so that you can operate on them directly.
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/manticore/client.rb', line 199 def initialize( = {}) @finalizer = Finalizer.new self.class.shutdown_on_finalize self, @finalizer builder = client_builder builder.set_user_agent .fetch(:user_agent, "Manticore #{VERSION}") @options = @use_cookies = .fetch(:cookies, false) builder. unless @use_cookies builder.disable_content_compression if .fetch(:compression, true) == false builder.set_proxy get_proxy_host([:proxy]) if .key?(:proxy) builder.set_retry_handler LoggingStandardRetryHandler.new .fetch(:automatic_retries, 3), .fetch(:retry_non_idempotent, false) # http://hc.apache.org/httpcomponents-client-ga/tutorial/html/advanced.html#stateful_conn # By default this is used to prevent different contexts from accessing SSL data # Since we're running this for JRuby which does not have context separation within the JVM # We can disable this for connection reuse. builder.disable_connection_state unless .fetch(:ssl, {}).fetch(:track_state, false) @keepalive = .fetch(:keepalive, true) if @keepalive == false builder.set_connection_reuse_strategy NoConnectionReuseStrategy::INSTANCE # return false else builder.set_connection_reuse_strategy DefaultConnectionReuseStrategy.new end builder.set_default_socket_config () builder.set_connection_manager pool() request_config = RequestConfig.custom request_config.set_connection_request_timeout .fetch(:request_timeout, DEFAULT_REQUEST_TIMEOUT) * 1000 request_config.set_connect_timeout .fetch(:connect_timeout, DEFAULT_CONNECT_TIMEOUT) * 1000 request_config.set_socket_timeout .fetch(:socket_timeout, DEFAULT_SOCKET_TIMEOUT) * 1000 request_config.set_max_redirects .fetch(:max_redirects, DEFAULT_MAX_REDIRECTS) request_config.set_expect_continue_enabled .fetch(:expect_continue, DEFAULT_EXPECT_CONTINUE) request_config.set_stale_connection_check_enabled .fetch(:stale_check, DEFAULT_STALE_CHECK) request_config.set_circular_redirects_allowed false yield builder, request_config if block_given? builder.set_default_request_config request_config.build @client = builder.build finalize @client, :close @options = @async_requests = Queue.new @stubs = {} end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
138 139 140 |
# File 'lib/manticore/client.rb', line 138 def client @client end |
Class Method Details
.shutdown_on_finalize(client, finalizer) ⇒ Object
417 418 419 |
# File 'lib/manticore/client.rb', line 417 def self.shutdown_on_finalize(client, finalizer) ObjectSpace.define_finalizer(client, finalizer) end |
Instance Method Details
#clear_pending ⇒ Object
Remove all pending asynchronous requests.
345 346 347 348 |
# File 'lib/manticore/client.rb', line 345 def clear_pending @async_requests.clear nil end |
#clear_stubs! ⇒ Object
Wipe all currently-set stubs.
338 339 340 |
# File 'lib/manticore/client.rb', line 338 def clear_stubs! @stubs.clear end |
#close(await: nil) ⇒ Object
In versions before 0.9 this method only closed the underlying ‘CloseableHttpClient`
Release resources held by this client, namely:
- close the internal http client
- shutdown the connection pool
- stops accepting async requests in the executor
After this call the client is no longer usable.
374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 |
# File 'lib/manticore/client.rb', line 374 def close(await: nil) ObjectSpace.undefine_finalizer(self) @finalizer.call # which does ~ : # @executor&.shutdown rescue nil # @client&.close # @pool&.shutdown rescue nil case await when false, nil @executor&.shutdown_now rescue nil when Numeric # NOTE: the concept of awaiting gracefully might/should also be used with the pool/client closing millis = java.util.concurrent.TimeUnit::MILLISECONDS @executor&.await_termination(await * 1000, millis) rescue nil else nil end @async_requests.close end |
#delete(url, options = {}, &block) ⇒ Response
Perform a HTTP DELETE request
289 290 291 292 |
# File 'lib/manticore/client.rb', line 289 def delete(url, = {}, &block) = treat_params_as_query() request HttpDeleteWithEntity, url, , &block end |
#execute! ⇒ Array
Execute all queued async requests
353 354 355 356 357 358 359 360 361 362 363 364 365 |
# File 'lib/manticore/client.rb', line 353 def execute! method = executor.java_method(:submit, [java.util.concurrent.Callable.java_class]) result = [] result << method.call(@async_requests.pop) until @async_requests.empty? result.map do |future| begin future.get rescue Java::JavaUtilConcurrent::ExecutionException => e # These exceptions should be handled in on_failure blocks. end end end |
#executor ⇒ Object
Get at the underlying ExecutorService used to invoke asynchronous calls.
412 413 414 |
# File 'lib/manticore/client.rb', line 412 def executor @executor ||= create_executor end |
#get(url, options = {}, &block) ⇒ Response
Perform a HTTP GET request
263 264 265 266 |
# File 'lib/manticore/client.rb', line 263 def get(url, = {}, &block) = treat_params_as_query() request HttpGetWithEntity, url, , &block end |
#head(url, options = {}, &block) ⇒ Response
Perform a HTTP HEAD request
276 277 278 279 |
# File 'lib/manticore/client.rb', line 276 def head(url, = {}, &block) = treat_params_as_query() request HttpHead, url, , &block end |
#http(method, url, options = {}, &block) ⇒ Response
Perform an HTTP request, passing the method as a parameter
316 317 318 319 320 321 322 323 |
# File 'lib/manticore/client.rb', line 316 def http(method, url, = {}, &block) case method.to_s.downcase when *%w(get put head post delete options patch) send method, url, , &block else raise "Invalid method: #{method}" end end |
#options(url, options = {}, &block) ⇒ Response
Perform a HTTP OPTIONS request
296 297 298 |
# File 'lib/manticore/client.rb', line 296 def (url, = {}, &block) request HttpOptions, url, , &block end |
#patch(url, options = {}, &block) ⇒ Response
Perform a HTTP PATCH request
302 303 304 |
# File 'lib/manticore/client.rb', line 302 def patch(url, = {}, &block) request HttpPatch, url, , &block end |
#pool_stats ⇒ Object
Return a hash of statistics about this client’s HTTP connection pool
249 250 251 252 253 254 255 256 257 |
# File 'lib/manticore/client.rb', line 249 def pool_stats stats = @pool.get_total_stats { max: stats.get_max, leased: stats.get_leased, pending: stats.get_pending, available: stats.get_available, } end |
#post(url, options = {}, &block) ⇒ Response
Perform a HTTP POST request
283 284 285 |
# File 'lib/manticore/client.rb', line 283 def post(url, = {}, &block) request HttpPost, url, , &block end |
#put(url, options = {}, &block) ⇒ Response
Perform a HTTP PUT request
270 271 272 |
# File 'lib/manticore/client.rb', line 270 def put(url, = {}, &block) request HttpPut, url, , &block end |
#stub(url, stubs) ⇒ Object
Cause this client to return a stubbed response for this URL
328 329 330 |
# File 'lib/manticore/client.rb', line 328 def stub(url, stubs) @stubs[url_as_regex(url)] = stubs end |
#unstub(url) ⇒ Object
Cause this client to unstubbed previously-stubbed URL
333 334 335 |
# File 'lib/manticore/client.rb', line 333 def unstub(url) @stubs.delete(url_as_regex(url)) end |