Метод retry
Метод retry применяется к HTTP-клиенту Laravel
и позволяет автоматически повторять запросы при возникновении
ошибок. Первым параметром передаётся максимальное количество
попыток, вторым - задержка в миллисекундах между попытками,
третьим - колбэк, который определяет, какие ошибки следует
повторять. Если колбэк не указан, повторяются все ошибки,
кроме исключений ConnectionException.
Синтаксис
<?php
use Illuminate\Support\Facades\Http;
Http::retry($attempts, $delay, $callback);
?>
Пример
Давайте выполним GET-запрос с автоматическим повтором до трёх раз с задержкой в одну секунду:
<?php
use Illuminate\Support\Facades\Http;
$res = Http::retry(3, 1000)->get('https://api.example.com/users');
echo $res->body();
?>
Результат выполнения кода:
{"users": [{"id": 1, "name": "user"}, {"id": 2, "name": "user"}]}
Пример
Давайте настроим повтор только для ошибок с кодом 429 (Too Many Requests) с увеличивающейся задержкой:
<?php
use Illuminate\Support\Facades\Http;
$res = Http::retry(5, 1000, function ($exception, $request) {
return $exception->getCode() === 429;
})->get('https://api.example.com/posts');
echo $res->status();
?>
Результат выполнения кода:
"200"
Пример
Давайте используем экспоненциальную задержку между повторами с помощью колбэка:
<?php
use Illuminate\Support\Facades\Http;
$res = Http::retry(4, function ($attempt) {
return $attempt * 1000;
})->post('https://api.example.com/categories', [
'name' => 'category',
]);
echo $res->json();
?>
Результат выполнения кода:
{"id": 1, "name": "category", "created_at": "2026-01-01"}
Пример
Давайте выполним запрос с повторной попыткой только в случае ошибки соединения:
<?php
use Illuminate\Support\Facades\Http;
use Illuminate\Http\Client\ConnectionException;
$res = Http::retry(3, 2000, function ($exception, $request) {
return $exception instanceof ConnectionException;
})->get('https://api.example.com/articles');
echo $res->body();
?>
Результат выполнения кода:
[{"id": 1, "title": "article"}, {"id": 2, "title": "article"}]