Метод timeout
Метод timeout применяется к HTTP-клиенту Laravel
и устанавливает максимальное время ожидания ответа от
удалённого сервера в секундах. Первым параметром
передаётся количество секунд, в течение которых клиент
будет ждать ответа. По умолчанию таймаут составляет
30 секунд.
Синтаксис
<?php
use Illuminate\Support\Facades\Http;
Http::timeout($seconds);
?>
Пример
Давайте выполним GET-запрос с таймаутом в 10 секунд:
<?php
use Illuminate\Support\Facades\Http;
$res = Http::timeout(10)->get('https://api.example.com/posts');
if ($res->successful()) {
echo $res->body();
} else {
echo 'Request failed';
}
?>
Результат выполнения кода:
"[{\"id\":1,\"title\":\"article 1\"},{\"id\":2,\"title\":\"article 2\"}]"
Пример
Давайте выполним POST-запрос с таймаутом в 5 секунд
и передачей данных:
<?php
use Illuminate\Support\Facades\Http;
$data = ['name' => 'John', 'email' => 'john@example.com'];
$res = Http::timeout(5)->post('https://api.example.com/users', $data);
if ($res->successful()) {
echo $res->json();
} else {
echo 'Request timeout or failed';
}
?>
Результат выполнения кода:
"{\"id\":3,\"name\":\"John\",\"email\":\"john@example.com\"}"
Пример
Давайте выполним GET-запрос с таймаутом в 1 секунду
и обработаем исключение при превышении времени:
<?php
use Illuminate\Support\Facades\Http;
try {
$res = Http::timeout(1)->get('https://slow-api.example.com/data');
echo $res->body();
} catch (Exception $e) {
echo 'Request timed out: ' . $e->getMessage();
}
?>
Результат выполнения кода:
"Request timed out: Connection timed out"
Пример
Давайте выполним запрос с использованием метода
retry и таймаутом для повторных попыток:
<?php
use Illuminate\Support\Facades\Http;
$res = Http::timeout(3)
->retry(3, 1000)
->get('https://api.example.com/items');
if ($res->successful()) {
echo $res->collect()->toArray();
} else {
echo 'Failed after retries';
}
?>
Результат выполнения кода:
"[{\"id\":1,\"name\":\"item 1\"},{\"id\":2,\"name\":\"item 2\"}]"