Browsermob-Proxy
view release on metacpan or search on metacpan
lib/Browsermob/Server.pm view on Meta::CPAN
my $self = shift;
kill('SIGKILL', $self->_pid) and waitpid($self->_pid, 0);
}
sub create_proxy {
my ($self, %args) = @_;
my $proxy = Browsermob::Proxy->new(
server_addr => $self->server_addr,
server_port => $self->server_port,
%args
);
return $proxy;
}
sub get_proxies {
my $self = shift;
my $ua = $self->ua;
my $res = $ua->get('http://' . $self->server_addr . ':' . $self->server_port . '/proxy');
if ($res->is_success) {
my $list = from_json($res->decoded_content)->{proxyList};
my @proxies = map {
$_->{port};
} @$list;
return \@proxies;
}
}
sub find_open_port {
my ($self, @range) = @_;
my $proxies = $self->get_proxies;
my $count;
foreach (@range, @$proxies) {
$count->{$_}++;
}
foreach (sort @range) {
if ($count->{$_} == 1) {
return $_;
}
}
}
sub _is_listening {
my ($self, $timeout) = @_;
$timeout //= 30;
my $sock = IO::Socket::INET->new(
PeerAddr => $self->server_addr,
PeerPort => $self->server_port,
Timeout => $timeout
);
return $sock;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Browsermob::Server - Perl client to control the Browsermob Proxy server
=head1 VERSION
version 0.17
=head1 SYNOPSIS
my $server = Browsermob::Server->new(
path => '/opt/browsermob-proxy-2.0-beta-9/bin/browsermob-proxy'
);
$server->start; # ignore if your server is already started
my $proxy = $server->create_proxy;
my $port = $proxy->port;
$proxy->new_har;
# generate traffic across your port
`curl -x http://localhost:$port http://www.google.com > /dev/null 2>&1`;
print Dumper $proxy->har;
=head1 DESCRIPTION
This class provides a way to control the Browsermob Proxy server
within Perl. There are only a few public methods for starting and
stopping the server. You also have the option of instantiating a
server object and pointing it towards an existing BMP server on
localhost, and just using it to avoid having to pass the server_port
arg when instantiating new proxies.
=head1 ATTRIBUTES
=head2 path
The path to the browsermob_proxy binary. If you aren't planning to
call C<start>, this is optional.
=head2 server_addr
The address of the remote server where the Browsermob Proxy server is
running. This defaults to localhost.
=head2 port
( run in 0.394 second using v1.01-cache-2.11-cpan-39bf76dae61 )