libwww-perl
view release on metacpan or search on metacpan
lib/LWP/UserAgent.pm view on Meta::CPAN
my $self = shift;
my $old = $self->{def_headers} ||= HTTP::Headers->new;
if (@_) {
Carp::croak("default_headers not set to HTTP::Headers compatible object")
unless @_ == 1 && $_[0]->can("header_field_names");
$self->{def_headers} = shift;
}
return $old;
}
sub default_header {
my $self = shift;
return $self->default_headers->header(@_);
}
sub _agent { "libwww-perl/$VERSION" }
sub agent {
my $self = shift;
if (@_) {
my $agent = shift;
if ($agent) {
$agent .= $self->_agent if $agent =~ /\s+$/;
}
else {
undef($agent)
}
return $self->default_header("User-Agent", $agent);
}
return $self->default_header("User-Agent");
}
sub from { # legacy
my $self = shift;
return $self->default_header("From", @_);
}
sub conn_cache {
my $self = shift;
my $old = $self->{conn_cache};
if (@_) {
my $cache = shift;
if ( ref($cache) eq "HASH" ) {
require LWP::ConnCache;
$cache = LWP::ConnCache->new(%$cache);
}
elsif ( defined $cache) {
for my $conn ( $cache->get_connections ) {
$conn->timeout( $self->timeout );
}
}
$self->{conn_cache} = $cache;
}
return $old;
}
sub add_handler {
my($self, $phase, $cb, %spec) = @_;
$spec{line} ||= join(":", (caller)[1,2]);
my $conf = $self->{handlers}{$phase} ||= do {
require HTTP::Config;
HTTP::Config->new;
};
$conf->add(%spec, callback => $cb);
}
sub set_my_handler {
my($self, $phase, $cb, %spec) = @_;
$spec{owner} = (caller(1))[3] unless exists $spec{owner};
$self->remove_handler($phase, %spec);
$spec{line} ||= join(":", (caller)[1,2]);
$self->add_handler($phase, $cb, %spec) if $cb;
}
sub get_my_handler {
my $self = shift;
my $phase = shift;
my $init = pop if @_ % 2;
my %spec = @_;
my $conf = $self->{handlers}{$phase};
unless ($conf) {
return unless $init;
require HTTP::Config;
$conf = $self->{handlers}{$phase} = HTTP::Config->new;
}
$spec{owner} = (caller(1))[3] unless exists $spec{owner};
my @h = $conf->find(%spec);
if (!@h && $init) {
if (ref($init) eq "CODE") {
$init->(\%spec);
}
elsif (ref($init) eq "HASH") {
$spec{$_}= $init->{$_}
for keys %$init;
}
$spec{callback} ||= sub {};
$spec{line} ||= join(":", (caller)[1,2]);
$conf->add(\%spec);
return \%spec;
}
return wantarray ? @h : $h[0];
}
sub remove_handler {
my($self, $phase, %spec) = @_;
if ($phase) {
my $conf = $self->{handlers}{$phase} || return;
my @h = $conf->remove(%spec);
delete $self->{handlers}{$phase} if $conf->empty;
return @h;
}
return unless $self->{handlers};
return map $self->remove_handler($_), sort keys %{$self->{handlers}};
}
sub handlers {
my($self, $phase, $o) = @_;
my @h;
if ($o->{handlers} && $o->{handlers}{$phase}) {
push(@h, @{$o->{handlers}{$phase}});
}
if (my $conf = $self->{handlers}{$phase}) {
push(@h, $conf->matching($o));
}
return @h;
}
sub run_handlers {
my($self, $phase, $o) = @_;
# here we pass $_[2] to the callbacks, instead of $o, so that they
# can assign to it; e.g. request_prepare is documented to allow
# that
if (defined(wantarray)) {
for my $h ($self->handlers($phase, $o)) {
my $ret = $h->{callback}->($_[2], $self, $h);
return $ret if $ret;
}
return undef;
}
for my $h ($self->handlers($phase, $o)) {
$h->{callback}->($_[2], $self, $h);
}
}
# deprecated
sub use_eval { shift->_elem('use_eval', @_); }
sub use_alarm
{
Carp::carp("LWP::UserAgent->use_alarm(BOOL) is a no-op")
if @_ > 1 && $^W;
"";
}
( run in 1.786 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )