Class: Manticore::Client
- Inherits:
-
Object
- Object
- Manticore::Client
- Includes:
- ProxiesInterface
- Defined in:
- lib/manticore/client.rb,
lib/manticore/client/proxies.rb
Overview
Core Manticore client, with a backing PoolingHttpClientConnectionManager
Defined Under Namespace
Modules: ProxiesInterface Classes: AsyncProxy, BackgroundProxy, BaseProxy, 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.
Instance Method Summary collapse
-
#clear_pending ⇒ Object
Remove all pending asynchronous requests.
-
#clear_stubs! ⇒ Object
Wipe all currently-set stubs.
-
#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.
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 206 207 208 209 210 |
# File 'lib/manticore/client.rb', line 163 def initialize( = {}) 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 {|response, context| false } else builder.set_connection_reuse_strategy DefaultConnectionReuseStrategy.new end socket_config_builder = SocketConfig.custom socket_config_builder.set_so_timeout( .fetch(:socket_timeout, DEFAULT_SOCKET_TIMEOUT) * 1000 ) socket_config_builder.set_tcp_no_delay( .fetch(:tcp_no_delay, true) ) builder.set_default_socket_config socket_config_builder.build 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 @options = @async_requests = [] @stubs = {} end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
104 105 106 |
# File 'lib/manticore/client.rb', line 104 def client @client end |
Instance Method Details
#clear_pending ⇒ Object
Remove all pending asynchronous requests.
309 310 311 312 |
# File 'lib/manticore/client.rb', line 309 def clear_pending @async_requests.clear nil end |
#clear_stubs! ⇒ Object
Wipe all currently-set stubs.
302 303 304 |
# File 'lib/manticore/client.rb', line 302 def clear_stubs! @stubs.clear end |
#delete(url, options = {}, &block) ⇒ Response
Perform a HTTP DELETE request
253 254 255 256 |
# File 'lib/manticore/client.rb', line 253 def delete(url, = {}, &block) = treat_params_as_query() request HttpDeleteWithEntity, url, , &block end |
#execute! ⇒ Array
Execute all queued async requests
317 318 319 320 321 322 323 324 325 326 327 328 |
# File 'lib/manticore/client.rb', line 317 def execute! method = executor.java_method(:submit, [java.util.concurrent.Callable.java_class]) result = @async_requests.map {|r| method.call r } @async_requests.clear 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.
331 332 333 334 |
# File 'lib/manticore/client.rb', line 331 def executor create_executor_if_needed @executor end |
#get(url, options = {}, &block) ⇒ Response
Perform a HTTP GET request
227 228 229 230 |
# File 'lib/manticore/client.rb', line 227 def get(url, = {}, &block) = treat_params_as_query() request HttpGetWithEntity, url, , &block end |
#head(url, options = {}, &block) ⇒ Response
Perform a HTTP HEAD request
240 241 242 243 |
# File 'lib/manticore/client.rb', line 240 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
280 281 282 283 284 285 286 287 |
# File 'lib/manticore/client.rb', line 280 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
260 261 262 |
# File 'lib/manticore/client.rb', line 260 def (url, = {}, &block) request HttpOptions, url, , &block end |
#patch(url, options = {}, &block) ⇒ Response
Perform a HTTP PATCH request
266 267 268 |
# File 'lib/manticore/client.rb', line 266 def patch(url, = {}, &block) request HttpPatch, url, , &block end |
#pool_stats ⇒ Object
Return a hash of statistics about this client’s HTTP connection pool
213 214 215 216 217 218 219 220 221 |
# File 'lib/manticore/client.rb', line 213 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
247 248 249 |
# File 'lib/manticore/client.rb', line 247 def post(url, = {}, &block) request HttpPost, url, , &block end |
#put(url, options = {}, &block) ⇒ Response
Perform a HTTP PUT request
234 235 236 |
# File 'lib/manticore/client.rb', line 234 def put(url, = {}, &block) request HttpPut, url, , &block end |
#stub(url, stubs) ⇒ Object
Cause this client to return a stubbed response for this URL
292 293 294 |
# File 'lib/manticore/client.rb', line 292 def stub(url, stubs) @stubs[url_as_regex(url)] = stubs end |
#unstub(url) ⇒ Object
Cause this client to unstubbed previously-stubbed URL
297 298 299 |
# File 'lib/manticore/client.rb', line 297 def unstub(url) @stubs.delete(url_as_regex(url)) end |