Class: Camo::Client

Inherits:
Object
  • Object
show all
Includes:
HeadersUtils, MimeTypeUtils, Rack::Utils
Defined in:
lib/camo/client.rb

Constant Summary collapse

ALLOWED_TRANSFERRED_HEADERS =
HeaderHash[%w[Host Accept Accept-Encoding]]
KEEP_ALIVE =
["1", "true", true].include?(ENV.fetch("CAMORB_KEEP_ALIVE", false))
MAX_REDIRECTS =
ENV.fetch("CAMORB_MAX_REDIRECTS", 4)
SOCKET_TIMEOUT =
ENV.fetch("CAMORB_SOCKET_TIMEOUT", 10)
CONTENT_LENGTH_LIMIT =
ENV.fetch("CAMORB_LENGTH_LIMIT", 5242880).to_i

Constants included from MimeTypeUtils

MimeTypeUtils::SUPPORTED_CONTENT_TYPES

Constants included from HeadersUtils

HeadersUtils::HOSTNAME, HeadersUtils::REQUEST_SECURITY_HEADERS, HeadersUtils::RESPONSE_SECURITY_HEADERS, HeadersUtils::TIMING_ALLOW_ORIGIN

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from HeadersUtils

#default_request_headers, #default_response_headers, user_agent, #user_agent

Constructor Details

#initialize(logger = Logger.stdio) ⇒ Client

Returns a new instance of Client.



17
18
19
# File 'lib/camo/client.rb', line 17

def initialize(logger = Logger.stdio)
  @logger = logger
end

Instance Attribute Details

#loggerObject (readonly)

Returns the value of attribute logger.



15
16
17
# File 'lib/camo/client.rb', line 15

def logger
  @logger
end

Instance Method Details

#get(url, transferred_headers = {}, remaining_redirects = MAX_REDIRECTS) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/camo/client.rb', line 21

def get(url, transferred_headers = {}, remaining_redirects = MAX_REDIRECTS)
  logger.debug "Handling request to #{url}", {transferred_headers: transferred_headers, remaining_redirects: remaining_redirects}

  url = URI.parse(url)
  headers = build_request_headers(transferred_headers, url: url)
  response = get_request(url, headers, timeout: SOCKET_TIMEOUT)

  logger.debug "Request result", {status: response.status, headers: response.headers, body_bytesize: response.body.bytesize}

  case response.status
  when redirect?
    redirect(response, headers, remaining_redirects)
  when not_modified?
    [response.status, response.headers]
  else
    validate_response!(response)
    [response.status, response.headers, response.body]
  end
end