Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: Reacting to Mojo::UserAgent Errors

by AlwaysSurprised (Novice)
on Apr 16, 2018 at 23:51 UTC ( [id://1213030]=note: print w/replies, xml ) Need Help??


in reply to Re: Reacting to Mojo::UserAgent Errors
in thread Reacting to Mojo::UserAgent Errors

Perhaps they have wised to me, but at 5 URL/s they don't seem to have taken offence. It would be nice if Mojo::UserAgent allowed the useragent details to be set, but that doesn't appear to be the case.

I have read from the book of Mojolicious at the temple of CPAN and the code you cite but I can't get it to work (or not work). I haven't found specific details so I interpret the if tree to be "look for 200" (aka is_success is a 200 response code), if not look for a connection problem (aka is_error means the GET timesout for some reason).

Specifically, if I run

use Mojo::UserAgent; # Fine grained response handling (dies on connection errors) my $ua = Mojo::UserAgent->new; my $res = $ua->get('mojoliciousness.org/perldoc')->result; if ($res->is_success) { print $res->body } elsif ($res->is_error) { print $res->message } elsif ($res->code == 301) { print $res->headers->location } else { print 'Whatever...' } print "Got to the end\n";

with the correct URL, it works correctly and spits out the perldoc page and the extra message. Nowif I misspell the URL, like I have above, I'll get a "Can't connect: No such host is known" message but it doesn't show the "Got to the end" message i.e. the script terminates at is_error and I can't recover and move on.

Am I missing something here?

Replies are listed 'Best First'.
Re^3: Reacting to Mojo::UserAgent Errors
by marto (Cardinal) on Apr 17, 2018 at 03:42 UTC

    "It would be nice if Mojo::UserAgent allowed the useragent details to be set, but that doesn't appear to be the case."

    See transactor:

    # Change name of user agent $ua->transactor->name('MyUA 1.0');

    Here I used eval to catch errors. I'll check the situation you mention above at a sane hour.

Re^3: Reacting to Mojo::UserAgent Errors
by rizzo (Curate) on Apr 17, 2018 at 21:59 UTC
    Am I missing something here?

    Due to your misspelling, no IP address could be resolved.

    $ua->get('mojoliciousness.org/perldoc')

    returns an object of type Mojo::Transaction::HTTP which contains an attribute called  original_remote_address.
    Checking if this attribute has a defined value should solve your problem.

    use Mojo::UserAgent; # Fine grained response handling (dies on connection errors) + my $ua = Mojo::UserAgent->new; #my $res = $ua->get('mojoliciousness.org/perldoc')->result; + my $res = $ua->get('mojoliciousness.org/perldoc'); if (defined ($res->original_remote_address)) { if ($res->result->is_success) { print $res->result->body } elsif ($res->result->is_error) { print $res->result->message } elsif ($res->result->code == 301) { print $res->result->headers->l +ocation } else { print 'Whatever...' } print "remote address: ".$res->original_remote_address."\n"; } else { print "failed to resolve url ...\n"; } print "Got to the end\n";

      My bad. I shouldn't have used a misspelt domain to illustrate crashing the script.

      My script, crashes out at the get with errors of "inactivity timeout" or "premature connection close". I can't see an attribute to interogate to capture those and recover. At the moment, the get fails, the script halts and I'm staring at the command prompt (All hail the command prompt); I'm not getting as far as the if statement.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1213030]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others pondering the Monastery: (8)
As of 2024-04-23 16:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found