HTTP-клиент для PHP: топ библиотек для работы с запросами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

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";
?>

Рекомендаций