NAME

Mojo::UserAgent::Role::Retry - Retry requests on failure

VERSION

version 0.001

SYNOPSIS

use Mojo::UserAgent;
use v5.10;

my $ua = Mojo::UserAgent->with_roles('+Retry')->new;
say $ua->get('https://www.perl.org/')->result->dom->at('title')->text;

DESCRIPTION

This role adds retry capabilities to Mojo::UserAgent HTTP requests. By default (see "retry_policy"), if a connection error is returned, or if a 429 or 503 response code is received, then a retry is invoked after a wait period.

ATTRIBUTES

Mojo::UserAgent::Role::Retry adds the following attributes:

retries

Defaults to 5. The maximum number of retries. If after all retries, the request still fails, then the last response is returned back to the caller to interpret.

my $ua = Mojo::UserAgent->with_roles('+Retry')->new(retries => 5);

retry_wait_min

Defaults to 1. The minimum wait time between retries in seconds. The Retry-After header value from the response is used if it is greater than this value but lower than retry_wait_max.

my $ua = Mojo::UserAgent->with_roles('+Retry')->new(retry_wait_min => 1);

retry_wait_max

Defaults to 20. The maximum wait time between retries in seconds. It's used if the Retry-After header value from the response is greater than this value.

my $ua = Mojo::UserAgent->with_roles('+Retry')->new(retry_wait_max => 20);

retry_policy

The policy to determine if a request should be retried. It must return a subroutine that returns false if the request should be retried, or true otherwise. On each invocation, the subroutine receives a new Mojo::Transaction::HTTP to evaluate.

By default, it retries on connection errors, 429 and 503 HTTP response codes.

my $ua = Mojo::UserAgent->with_roles('+Retry')->new(retry_policy => sub {
  # Retry on 418 HTTP response codes
  return sub {
    if (shift->res->code == 418) { return 0; }
    return 1;
  }
});

SEE ALSO

Mojolicious::UserAgent, Mojolicious, Mojolicious::Guides, https://mojolicious.org.

AUTHOR

Christian Segundo <ssmn@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2024 by Christian Segundo <ssmn@cpan.org>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.