Class: BrowserMob::Proxy::Client
- Inherits:
-
Object
- Object
- BrowserMob::Proxy::Client
- Defined in:
- lib/browsermob/proxy/client.rb
Constant Summary collapse
- TIMEOUTS =
{ request: :requestTimeout, read: :readTimeout, connection: :connectionTimeout, dns_cache: :dnsCacheTimeout }
- LIMITS =
{ :upstream_kbps => 'upstreamKbps', :downstream_kbps => 'downstreamKbps', :latency => 'latency' }
Instance Attribute Summary collapse
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
Class Method Summary collapse
Instance Method Summary collapse
- #basic_authentication(domain, username, password) ⇒ Object
- #blacklist(regexp, status_code) ⇒ Object
- #clear_blacklist ⇒ Object
- #clear_rewrites ⇒ Object
- #clear_whitelist ⇒ Object
- #close ⇒ Object
- #har ⇒ Object
- #header(hash) ⇒ Object (also: #headers)
-
#initialize(resource, host, port) ⇒ Client
constructor
A new instance of Client.
- #limit(opts) ⇒ Object
- #new_har(ref = nil, opts = {}) ⇒ Object
- #new_page(ref) ⇒ Object
-
#remap_dns_hosts(hash) ⇒ Object
Override normal DNS lookups (remap the given hosts with the associated IP address).
- #rewrite(match_regex, replace) ⇒ Object
- #selenium_proxy(*protocols) ⇒ Object
-
#timeouts(timeouts = {}) ⇒ Object
Specify timeouts that will be used by a proxy (see README of browsermob-proxy itself for more info about what they mean).
-
#whitelist(regexp, status_code) ⇒ Object
Set a list of URL regexes to whitelist.
Constructor Details
#initialize(resource, host, port) ⇒ Client
Returns a new instance of Client.
22 23 24 25 26 |
# File 'lib/browsermob/proxy/client.rb', line 22 def initialize(resource, host, port) @resource = resource @host = host @port = port end |
Instance Attribute Details
#host ⇒ Object (readonly)
Returns the value of attribute host.
5 6 7 |
# File 'lib/browsermob/proxy/client.rb', line 5 def host @host end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
5 6 7 |
# File 'lib/browsermob/proxy/client.rb', line 5 def port @port end |
Class Method Details
.from(server_url) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/browsermob/proxy/client.rb', line 7 def self.from(server_url) # ActiveSupport may define Object#load, so we can't use MultiJson.respond_to? here. sm = MultiJson.singleton_methods.map { |e| e.to_sym } decode_method = sm.include?(:load) ? :load : :decode port = MultiJson.send(decode_method, RestClient.post(URI.join(server_url, "proxy").to_s, '') ).fetch('port') uri = URI.parse(File.join(server_url, "proxy", port.to_s)) resource = RestClient::Resource.new(uri.to_s) Client.new resource, uri.host, port end |
Instance Method Details
#basic_authentication(domain, username, password) ⇒ Object
122 123 124 125 |
# File 'lib/browsermob/proxy/client.rb', line 122 def basic_authentication(domain, username, password) data = { username: username, password: password } @resource["auth/basic/#{domain}"].post data.to_json, :content_type => "application/json" end |
#blacklist(regexp, status_code) ⇒ Object
99 100 101 102 |
# File 'lib/browsermob/proxy/client.rb', line 99 def blacklist(regexp, status_code) regex = Regexp === regexp ? regexp.source : regexp.to_s @resource['blacklist'].put :regex => regex, :status => status_code end |
#clear_blacklist ⇒ Object
104 105 106 |
# File 'lib/browsermob/proxy/client.rb', line 104 def clear_blacklist @resource['blacklist'].delete end |
#clear_rewrites ⇒ Object
113 114 115 |
# File 'lib/browsermob/proxy/client.rb', line 113 def clear_rewrites @resource['rewrite'].delete end |
#clear_whitelist ⇒ Object
95 96 97 |
# File 'lib/browsermob/proxy/client.rb', line 95 def clear_whitelist @resource['whitelist'].delete end |
#close ⇒ Object
198 199 200 |
# File 'lib/browsermob/proxy/client.rb', line 198 def close @resource.delete end |
#har ⇒ Object
62 63 64 |
# File 'lib/browsermob/proxy/client.rb', line 62 def har HAR::Archive.from_string @resource["har"].get end |
#header(hash) ⇒ Object Also known as: headers
117 118 119 |
# File 'lib/browsermob/proxy/client.rb', line 117 def header(hash) @resource['headers'].post hash.to_json, :content_type => "application/json" end |
#limit(opts) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/browsermob/proxy/client.rb', line 180 def limit(opts) params = {} opts.each do |key, value| unless LIMITS.member?(key) raise ArgumentError, "invalid: #{key.inspect} (valid options: #{LIMITS.keys.inspect})" end params[LIMITS[key]] = Integer(value) end if params.empty? raise ArgumentError, "must specify one of #{LIMITS.keys.inspect}" end @resource['limit'].put params end |
#new_har(ref = nil, opts = {}) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/browsermob/proxy/client.rb', line 37 def new_har(ref = nil, opts = {}) if opts.empty? && ref.kind_of?(Hash) opts = ref ref = nil end params = {} params[:initialPageRef] = ref if ref params[:captureHeaders] = true if opts[:capture_headers] params[:captureContent] = true if opts[:capture_content] if opts[:capture_binary_content] params[:captureContent] = true params[:captureBinaryContent] = true end previous = @resource["har"].put params HAR::Archive.from_string(previous) unless previous.empty? end |
#new_page(ref) ⇒ Object
58 59 60 |
# File 'lib/browsermob/proxy/client.rb', line 58 def new_page(ref) @resource['har/pageRef'].put :pageRef => ref end |
#remap_dns_hosts(hash) ⇒ Object
Override normal DNS lookups (remap the given hosts with the associated IP address).
Each invocation of the method will add given hosts to existing BrowserMob’s DNS cache instead of overriding it.
170 171 172 |
# File 'lib/browsermob/proxy/client.rb', line 170 def remap_dns_hosts(hash) @resource['hosts'].post hash.to_json, :content_type => 'application/json' end |
#rewrite(match_regex, replace) ⇒ Object
108 109 110 111 |
# File 'lib/browsermob/proxy/client.rb', line 108 def rewrite(match_regex, replace) regex = Regexp === match_regex ? match_regex.source : match_regex.to_s @resource['rewrite'].put :matchRegex => regex, :replace => replace end |
#selenium_proxy(*protocols) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/browsermob/proxy/client.rb', line 66 def selenium_proxy(*protocols) require 'selenium-webdriver' unless defined?(Selenium) protocols += [:http] if protocols.empty? unless (protocols - [:http, :ssl, :ftp]).empty? raise "Invalid protocol specified. Must be one of: :http, :ssl, or :ftp." end proxy_mapping = {} protocols.each { |proto| proxy_mapping[proto] = "#{@host}:#{@port}" } Selenium::WebDriver::Proxy.new(proxy_mapping) end |
#timeouts(timeouts = {}) ⇒ Object
Specify timeouts that will be used by a proxy (see README of browsermob-proxy itself for more info about what they mean)
145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/browsermob/proxy/client.rb', line 145 def timeouts(timeouts = {}) params = {} timeouts.each do |key, value| unless TIMEOUTS.member?(key) raise ArgumentError, "invalid key: #{key.inspect}, should belong to: #{TIMEOUTS.keys.inspect}" end params[TIMEOUTS[key]] = (value * 1000).to_i end @resource['timeout'].put params end |
#whitelist(regexp, status_code) ⇒ Object
Set a list of URL regexes to whitelist
Note that passed regexp/string should match string as a whole (i.e. if /example.com/ is whitelisted “www.example.com” won’t be allowed though if /.+example.com“ is whitelisted ”www.example.com“ will be allowed)
90 91 92 93 |
# File 'lib/browsermob/proxy/client.rb', line 90 def whitelist(regexp, status_code) regex = Array(regexp).map { |rx| Regexp === rx ? rx.source : rx.to_s }.join(',') @resource['whitelist'].put :regex => regex, :status => status_code end |