Carp::carp("LWP::UserAgent->use_alarm(BOOL) is a no-op")
if @_ > 1 && $^W;
"";
}
sub clone
{
my $self = shift;
my $copy = bless { %$self }, ref $self; # copy most fields
delete $copy->{handlers};
delete $copy->{conn_cache};
# copy any plain arrays and hashes; known not to need recursive copy
for my $k (qw(proxy no_proxy requests_redirectable)) {
next unless $copy->{$k};
if (ref($copy->{$k}) eq "ARRAY") {
$copy->{$k} = [ @{$copy->{$k}} ];
}
elsif (ref($copy->{$k}) eq "HASH") {
$copy->{$k} = { %{$copy->{$k}} };
}
}
if ($self->{def_headers}) {
$copy->{def_headers} = $self->{def_headers}->clone;
}
# re-enable standard handlers
$copy->parse_head($self->parse_head);
# no easy way to clone the cookie jar; so let's just remove it for now
$copy->cookie_jar(undef);
$copy;
}
sub mirror
{
my($self, $url, $file) = @_;
LWP::Debug::trace('()');
my $request = HTTP::Request->new('GET', $url);
if (-e $file) {
my($mtime) = (stat($file))[9];
if($mtime) {
$request->header('If-Modified-Since' =>
HTTP::Date::time2str($mtime));
}
}
my $tmpfile = "$file-$$";
my $response = $self->request($request, $tmpfile);
if ($response->is_success) {
my $file_length = (stat($tmpfile))[7];
my($content_length) = $response->header('Content-length');
if (defined $content_length and $file_length < $content_length) {
unlink($tmpfile);
die "Transfer truncated: " .
"only $file_length out of $content_length bytes received\n";
}
elsif (defined $content_length and $file_length > $content_length) {
unlink($tmpfile);
die "Content-length mismatch: " .
"expected $content_length bytes, got $file_length\n";
}
else {
# OK
if (-e $file) {
# Some dosish systems fail to rename if the target exists
chmod 0777, $file;
unlink $file;
}
rename($tmpfile, $file) or
die "Cannot rename '$tmpfile' to '$file': $!\n";
if (my $lm = $response->last_modified) {
# make sure the file has the same last modification time
utime $lm, $lm, $file;
}
}
}
else {
unlink($tmpfile);
}
return $response;
}
sub _need_proxy {
my($req, $ua) = @_;
return if exists $req->{proxy};
my $proxy = $ua->{proxy}{$req->url->scheme} || return;
if ($ua->{no_proxy}) {
if (my $host = eval { $req->url->host }) {
=9= |