Re: timeout
Chris Boyce <[email protected]>
| Newsgroups | gmane.comp.lang.perl.modules.lwp |
|---|---|
| Message-ID | <[email protected]> |
This is not so much a solution, as it is an alternative to the LWP
timeout...
I've had good luck just using an eval block around the request, and then
making a simple signal catcher to do something if the alarm times out:
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Headers;
use HTTP::Request;
use HTTP::Response;
$SIG{ALRM} = sub { die "timeout\n"; };
$timeout=5;
eval {
# Set the alarm clock for timeout seconds
alarm($timeout);
# Run the request...
$http_response = $agent->request($request);
# If we're here, then the request didn't get zapped by the alarm...
# reset the alarm to nada.
alarm(0);
};
The word "timeout" will appear in the response if the alarm goes off.
Sorry if this is crude, but it works great.
-Chris
On Thu, 2006-11-09 at 00:09 +0200, Octavian Rasnita wrote:
> Hi,
>
> I've also tried without that "-" before "timeout", but it doesn't work. I
> have also tried with $ua->timeout(5), but it doesn't work either.
>
> Here is the test script and its result:
>
> use strict;
> use LWP::UserAgent;
>
> my $begin = time();
>
> my $ua = LWP::UserAgent->new();
> $ua->timeout(5);
>
> print $ua->get("http://www.presaromana.ro/")->content;
>
> print time() - $begin;
>
> And the result is:
> 500 Can't connect to www.presaromana.ro:80 (connect: Unknown error)
> 23
>
> So it takes 23 seconds instead of timing out after 5.
>
> Is it a bug in LWP, or a limitation of Windows, or I am doing something
> wrong?
>
> Thank you.
>
> Teddy
>
> ----- Original Message -----
> From: "Ted Behling" <[email protected]>
> To: "Octavian Rasnita" <[email protected]>; <[email protected]>
> Sent: Wednesday, November 08, 2006 8:22 PM
> Subject: RE: timeout
>
>
> True. Or, Octavian, just leave out the hyphen from your timeout
> parameter, as in:
>
> my $ua = LWP::UserAgent->new(timeout => 5);
>
> Ted Behling
> ISP Systems Analyst, Hargray Communications
> [email protected]
>
> -----Original Message-----
> From: Eamon Daly [mailto:[email protected]]
> Sent: Wednesday, November 08, 2006 10:36 AM
> To: [email protected]
> Cc: Octavian Rasnita
> Subject: Re: timeout
>
> From the LWP::UserAgent perldoc at
>
> http://search.cpan.org/~gaas/libwww-perl-5.805/lib/LWP/UserAgent.pm
>
> $ua->timeout( $secs )
> Get/set the timeout value in seconds. The default timeout() value is
> 180 seconds, i.e. 3 minutes.
>
> So in your first example, it should be:
>
> use strict;
> use LWP::UserAgent;
>
> my $ua = LWP::UserAgent->new;
> $ua->timeout(5);
>
> print $ua->get("http://www.presaromana.ro/")->content;
>
> ____________________________________________________________
> Eamon Daly
>
>
>
> ----- Original Message -----
> From: "Octavian Rasnita" <[email protected]>
> To: <[email protected]>
> Sent: Wednesday, November 08, 2006 8:37 AM
> Subject: timeout
>
>
> : Hi,
> :
> : I am trying to create a very simple www client that times out after 5
> : seconds. I have tried the 2 examples below, but none of them are
> working.
> : They don't time out even though the target site cannot be found.
> : I think they time out after some more time.
> :
> : I have ran them under Windows 2000 with ActivePerl 5.8.8.
> : Is it possible to do what I want?
> :
> : Thanks.
> :
> : use strict;
> : use LWP::UserAgent;
> :
> : my $ua = LWP::UserAgent->new(-timeout => 5);
> :
> : print $ua->get("http://www.presaromana.ro/")->content;
> :
> : __END__
> :
> : my $req = HTTP::Request->new("GET", "http://www.presaromana.ro/");
> : my $res = $ua->request($req);
> :
> : print $res->content();
> :
> :
> : Teddy
> :
>
>
>
--
Chris Boyce