$request, $arg, $size);
}
return $response;
}
return $response;
}
#
# Now the shortcuts...
#
sub get {
require HTTP::Request::Common;
my($self, @parameters) = @_;
my @suff = $self->_process_colonic_headers(\@parameters,1);
return $self->request( HTTP::Request::Common::GET( @parameters ), @suff );
}
sub post {
require HTTP::Request::Common;
my($self, @parameters) = @_;
my @suff = $self->_process_colonic_headers(\@parameters, (ref($parameters[1]) ? 2 : 1));
return $self->request( HTTP::Request::Common::POST( @parameters ), @suff );
}
sub head {
require HTTP::Request::Common;
my($self, @parameters) = @_;
my @suff = $self->_process_colonic_headers(\@parameters,1);
return $self->request( HTTP::Request::Common::HEAD( @parameters ), @suff );
}
sub _process_colonic_headers {
# Process :content_cb / :content_file / :read_size_hint headers.
my($self, $args, $start_index) = @_;
my($arg, $size);
for(my $i = $start_index; $i < @$args; $i += 2) {
next unless defined $args->[$i];
#printf "Considering %s => %s\n", $args->[$i], $args->[$i + 1];
if($args->[$i] eq ':content_cb') {
# Some sanity-checking...
$arg = $args->[$i + 1];
Carp::croak("A :content_cb value can't be undef") unless defined $arg;
Carp::croak("A :content_cb value must be a coderef")
unless ref $arg and UNIVERSAL::isa($arg, 'CODE');
}
elsif ($args->[$i] eq ':content_file') {
$arg = $args->[$i + 1];
# Some sanity-checking...
Carp::croak("A :content_file value can't be undef")
unless defined $arg;
Carp::croak("A :content_file value can't be a reference")
if ref $arg;
Carp::croak("A :content_file value can't be \"\"")
unless length $arg;
}
elsif ($args->[$i] eq ':read_size_hint') {
$size = $args->[$i + 1];
# Bother checking it?
}
else {
next;
}
splice @$args, $i, 2;
$i -= 2;
}
# And return a suitable suffix-list for request(REQ,...)
return unless defined $arg;
return $arg, $size if defined $size;
return $arg;
}
my @ANI = qw(- \ | /);
sub progress {
my($self, $status, $m) = @_;
return unless $self->{show_progress};
if ($status eq "begin") {
print STDERR "** ", $m->method, " ", $m->uri, " ==> ";
$self->{progress_start} = time;
$self->{progress_lastp} = "";
$self->{progress_ani} = 0;
}
elsif ($status eq "end") {
delete $self->{progress_lastp};
delete $self->{progress_ani};
print STDERR $m->status_line;
my $t = time - delete $self->{progress_start};
=5= |