Class: Browser

Inherits:
Object
  • Object
show all
Extended by:
Actions
Includes:
Options
Defined in:
lib/common/browser.rb,
lib/common/browser/options.rb,
lib/common/browser/actions.rb

Defined Under Namespace

Modules: Actions, Options

Constant Summary

OPTIONS =
[
  :available_user_agents,
  :basic_auth,
  :cache_ttl,
  :max_threads,
  :user_agent,
  :user_agent_mode,
  :proxy,
  :proxy_auth
]
@@instance =
nil

Constants included from Options

Options::USER_AGENT_MODES

Instance Attribute Summary (collapse)

Attributes included from Options

#available_user_agents, #basic_auth, #cache_ttl, #proxy, #proxy_auth, #user_agent, #user_agent_mode

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods included from Actions

get, get_and_follow_location, post, process

Methods included from Options

#invalid_proxy_auth_format, #max_threads, #max_threads=, #override_config

Constructor Details

- (Browser) initialize(options = {})

Parameters:

  • options (Hash) (defaults to: {})


29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/common/browser.rb', line 29

def initialize(options = {})
  @config_file = options[:config_file] || CONF_DIR + '/browser.conf.json'
  @cache_dir   = options[:cache_dir]   || CACHE_DIR + '/browser'

  load_config()
  override_config(options)

  unless @hydra
    @hydra = Typhoeus::Hydra.new(max_concurrency: self.max_threads)
  end

  @cache = TyphoeusCache.new(@cache_dir)
  @cache.clean

  Typhoeus::Config.cache = @cache
end

Instance Attribute Details

- (Object) cache_dir (readonly)

Returns the value of attribute cache_dir



24
25
26
# File 'lib/common/browser.rb', line 24

def cache_dir
  @cache_dir
end

- (Object) config_file (readonly)

Returns the value of attribute config_file



24
25
26
# File 'lib/common/browser.rb', line 24

def config_file
  @config_file
end

- (Object) hydra (readonly)

Returns the value of attribute hydra



24
25
26
# File 'lib/common/browser.rb', line 24

def hydra
  @hydra
end

Class Method Details

+ (Array) append_params_header_field(params = {}, field, field_value) (private)

Parameters:

  • params (Hash) (defaults to: {})
  • field (String)
  • field_value (Mixed)

Returns:



143
144
145
146
147
148
149
150
# File 'lib/common/browser.rb', line 143

def self.append_params_header_field(params = {}, field, field_value)
  if !params.has_key?(:headers)
    params = params.merge(:headers => { field => field_value })
  elsif !params[:headers].has_key?(field)
    params[:headers][field] = field_value
  end
  params
end

+ (Browser) instance(options = {})

Parameters:

  • options (Hash) (defaults to: {})

Returns:



51
52
53
54
55
56
# File 'lib/common/browser.rb', line 51

def self.instance(options = {})
  unless @@instance
    @@instance = new(options)
  end
  @@instance
end

+ (Object) reset



58
59
60
# File 'lib/common/browser.rb', line 58

def self.reset
  @@instance = nil
end

Instance Method Details

- (Typhoeus::Request) forge_request(url, params = {})

Parameters:

  • url (String)
  • params (Hash) (defaults to: {})

Returns:



91
92
93
# File 'lib/common/browser.rb', line 91

def forge_request(url, params = {})
  Typhoeus::Request.new(url, merge_request_params(params))
end

- (void) load_config(config_file = nil)

This method returns an undefined value.

If an option was set but is not in the new config_file it's value is kept

Parameters:

  • config_file (String) (defaults to: nil)


69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/common/browser.rb', line 69

def load_config(config_file = nil)
  @config_file = config_file || @config_file

  if File.symlink?(@config_file)
    raise "[ERROR] Config file is a symlink."
  else
    data = JSON.parse(File.read(@config_file))
  end

  OPTIONS.each do |option|
    option_name = option.to_s

    unless data[option_name].nil?
      self.send(:#{option_name}=", data[option_name])
    end
  end
end

- (Hash) merge_request_params(params = {})

Parameters:

  • params (Hash) (defaults to: {})

Returns:

  • (Hash)


98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/common/browser.rb', line 98

def merge_request_params(params = {})
  params = Browser.append_params_header_field(
    params,
    'User-Agent',
    self.user_agent
  )

  if @proxy
    params = params.merge(proxy: @proxy)

    if @proxy_auth
      params = params.merge(proxyauth: @proxy_auth)
    end
  end

  if @basic_auth
    params = Browser.append_params_header_field(
      params,
      'Authorization',
      @basic_auth
    )
  end

  # Used to enable the cache system if :cache_ttl > 0
  unless params.has_key?(:cache_ttl)
    params = params.merge(cache_ttl: @cache_ttl)
  end

  # Disable SSL-Certificate checks
  params.merge!(ssl_verifypeer: false)
  params.merge!(ssl_verifyhost: 0)

  params.merge!(cookiejar: @cache_dir + '/cookie-jar')
  params.merge!(cookiefile: @cache_dir + '/cookie-jar')

  params
end