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).
- #request_interceptor=(data) ⇒ Object
- #response_interceptor=(data) ⇒ Object
- #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.
25 26 27 28 29 |
# File 'lib/browsermob/proxy/client.rb', line 25 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, port = nil) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/browsermob/proxy/client.rb', line 7 def self.from(server_url, port = nil) # 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 new_proxy_url = URI.join(server_url, "proxy") new_proxy_url.query = "port=#{port}" if port port = MultiJson.send(decode_method, RestClient.post(new_proxy_url.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
125 126 127 128 |
# File 'lib/browsermob/proxy/client.rb', line 125 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
102 103 104 105 |
# File 'lib/browsermob/proxy/client.rb', line 102 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
107 108 109 |
# File 'lib/browsermob/proxy/client.rb', line 107 def clear_blacklist @resource['blacklist'].delete end |
#clear_rewrites ⇒ Object
116 117 118 |
# File 'lib/browsermob/proxy/client.rb', line 116 def clear_rewrites @resource['rewrite'].delete end |
#clear_whitelist ⇒ Object
98 99 100 |
# File 'lib/browsermob/proxy/client.rb', line 98 def clear_whitelist @resource['whitelist'].delete end |
#close ⇒ Object
201 202 203 |
# File 'lib/browsermob/proxy/client.rb', line 201 def close @resource.delete end |
#har ⇒ Object
65 66 67 |
# File 'lib/browsermob/proxy/client.rb', line 65 def har HAR::Archive.from_string @resource["har"].get end |
#header(hash) ⇒ Object Also known as: headers
120 121 122 |
# File 'lib/browsermob/proxy/client.rb', line 120 def header(hash) @resource['headers'].post hash.to_json, :content_type => "application/json" end |
#limit(opts) ⇒ Object
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'lib/browsermob/proxy/client.rb', line 183 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
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/browsermob/proxy/client.rb', line 40 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
61 62 63 |
# File 'lib/browsermob/proxy/client.rb', line 61 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.
173 174 175 |
# File 'lib/browsermob/proxy/client.rb', line 173 def remap_dns_hosts(hash) @resource['hosts'].post hash.to_json, :content_type => 'application/json' end |
#request_interceptor=(data) ⇒ Object
205 206 207 |
# File 'lib/browsermob/proxy/client.rb', line 205 def request_interceptor=(data) @resource['interceptor/request'].post data, :content_type => "text/plain" end |
#response_interceptor=(data) ⇒ Object
209 210 211 |
# File 'lib/browsermob/proxy/client.rb', line 209 def response_interceptor=(data) @resource['interceptor/response'].post data, :content_type => "text/plain" end |
#rewrite(match_regex, replace) ⇒ Object
111 112 113 114 |
# File 'lib/browsermob/proxy/client.rb', line 111 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
69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/browsermob/proxy/client.rb', line 69 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)
148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/browsermob/proxy/client.rb', line 148 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)
93 94 95 96 |
# File 'lib/browsermob/proxy/client.rb', line 93 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 |