Class: BrowserMob::Proxy::Client
- Inherits:
-
Object
- Object
- BrowserMob::Proxy::Client
- Defined in:
- lib/browsermob/proxy/client.rb
Constant Summary collapse
- 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
- #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
Examples:.
- #new_page(ref) ⇒ Object
-
#remap_dns_hosts(hash) ⇒ Object
Override normal DNS lookups (remap the given hosts with the associated IP address).
- #selenium_proxy(*protocols) ⇒ Object
-
#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
106 107 108 109 |
# File 'lib/browsermob/proxy/client.rb', line 106 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
96 97 98 99 |
# File 'lib/browsermob/proxy/client.rb', line 96 def blacklist(regexp, status_code) regex = Regexp === regexp ? regexp.source : regexp.to_s @resource['blacklist'].put :regex => regex, :status => status_code end |
#close ⇒ Object
149 150 151 |
# File 'lib/browsermob/proxy/client.rb', line 149 def close @resource.delete end |
#har ⇒ Object
63 64 65 |
# File 'lib/browsermob/proxy/client.rb', line 63 def har HAR::Archive.from_string @resource["har"].get end |
#header(hash) ⇒ Object Also known as: headers
101 102 103 |
# File 'lib/browsermob/proxy/client.rb', line 101 def header(hash) @resource['headers'].post hash.to_json, :content_type => "application/json" end |
#limit(opts) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/browsermob/proxy/client.rb', line 131 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
Examples:
client.new_har("page-name")
client.new_har("page-name", :capture_headers => true)
client.new_har(:capture_headers => true)
client.new_har(:capture_content => true)
client.new_har(:capture_binary_content => true)
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/browsermob/proxy/client.rb', line 38 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
59 60 61 |
# File 'lib/browsermob/proxy/client.rb', line 59 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.
121 122 123 |
# File 'lib/browsermob/proxy/client.rb', line 121 def remap_dns_hosts(hash) @resource['hosts'].post hash.to_json, :content_type => 'application/json' end |
#selenium_proxy(*protocols) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/browsermob/proxy/client.rb', line 67 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 |
#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)
91 92 93 94 |
# File 'lib/browsermob/proxy/client.rb', line 91 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 |