HTTP-клиент для PHP: топ библиотек для работы с запросами
Современная PHP-разработка редко обходится без отправки HTTP-запросов: интеграция с внешними API, парсинг веб-страниц, проверка доступности сервисов. Встроенные средства PHP (например, file_get_contents() или cURL) часто недостаточно гибки или удобны. К счастью, экосистема PHP предлагает мощные библиотеки-клиенты, которые упрощают работу с HTTP. В этой статье мы разберём топ библиотек HTTP-клиентов для PHP, их особенности и примеры использования.
1. Guzzle — стандарт де-факто
Guzzle — самая популярная библиотека для работы с HTTP в PHP. Она установлена в миллионах проектов, включая Laravel, Drupal и Symfony. Guzzle предоставляет чистый объектно-ориентированный интерфейс, поддерживает асинхронные запросы, middleware, пулы соединений и PSR-18 (HTTP Client).
Установка
composer require guzzlehttp/guzzle
Пример: GET-запрос с обработкой ответа
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => 'https://api.github.com/',
'timeout' => 5.0,
]);
$response = $client->request('GET', 'users/octocat');
echo $response->getStatusCode(); // 200
$body = json_decode($response->getBody(), true);
echo $body['login']; // octocat
?>
Асинхронный запрос
<?php
$promise = $client->getAsync('https://httpbin.org/delay/1');
$promise->then(
function ($response) {
echo 'Готово: ' . $response->getStatusCode();
},
function ($exception) {
echo 'Ошибка: ' . $exception->getMessage();
}
);
$promise->wait(); // обязательно вызвать для выполнения
?>
Плюсы: огромное сообщество, гибкость, middleware для логирования/кэширования, полная поддержка PSR-7/PSR-18.
2. Symfony HttpClient — быстрый и современный
Компонент Symfony HttpClient появился в Symfony 4.4 и быстро завоевал популярность благодаря высокой производительности, встроенной поддержке мультиплексирования (HTTP/2) и отличной интеграции с Symfony. Он также совместим с PSR-18.
Установка
composer require symfony/http-client
Пример: параллельные запросы
<?php
require 'vendor/autoload.php';
use Symfony\Component\HttpClient\HttpClient;
$client = HttpClient::create();
$responses = [];
$urls = [
'https://api.github.com/users/octocat',
'https://api.github.com/users/nonexistent',
];
foreach ($urls as $url) {
$responses[] = $client->request('GET', $url);
}
foreach ($responses as $response) {
// Метод getContent() автоматически ждёт ответ
echo $response->getStatusCode() . ' - ' . $response->getContent(false) . "\n";
}
?>
Продвинутое использование: retry и кэширование
<?php
use Symfony\Component\HttpClient\RetryableHttpClient;
use Symfony\Component\HttpClient\HttpClient;
$client = new RetryableHttpClient(
HttpClient::create(['timeout' => 2.0]),
maxRetries: 3
);
$response = $client->request('GET', 'https://example.com');
echo $response->getContent();
?>
Плюсы: высокая скорость, встроенный retry-механизм, поддержка HTTP/2 push, низкое потребление памяти.
3. cURL (расширение PHP) — классика
Расширение cURL — встроенное в PHP решение, которое работает напрямую с libcurl. Оно не требует установки сторонних библиотек, но код получается более низкоуровневым. Подходит для простых задач или когда нельзя использовать Composer.
Пример: простой POST-запрос
<?php
$ch = curl_init('https://httpbin.org/post');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query(['name' => 'John']),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5,
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "Код: $httpCode, Ответ: $response";
?>
Также в библиотеке
Рекомендаций