HTTP-клиент cURL
App\Http\Client\Curl используется для выполнения исходящих HTTP-запросов к другим приложениям и сервисам.
Инициализация класса
Создайте объект Curl, передав адрес запроса и HTTP-метод. По умолчанию используется
Curl::GET.
use App\Http\Client\Curl;
$client = new Curl('http://127.0.0.1', Curl::GET);
После этого из переменной $client будут доступны все необходимые методы для работы.
Добавление опций
Метод $client->addOption($field, $value) добавляет cURL-опцию к запросу.
$client->addOption(CURLOPT_FOLLOWLOCATION, true)
->addOption(CURLOPT_RETURNTRANSFER, false);
Добавление исходящих заголовков
Метод $client->addHeader($key, $value) добавляет заголовок к исходящему запросу.
$client->addHeader('Content-Type', 'application/json')
->addHeader('Accept', 'application/json');
Выполнение запросов с разными HTTP-методами
Чтобы выполнить запрос, создайте объект Curl с нужным URL и методом, затем вызовите
$client->send($body = null).
$client = new Curl($url, Curl::GET);
$client->send();
$client = new Curl($url, Curl::POST);
$client->send([
'multipart' => [...]
]);
$client = new Curl($url, Curl::PUT);
$client->send([
'form' => [...]
]);
$client = new Curl($url, Curl::PATCH);
$client->send([
'json' => [...]
]);
$client = new Curl($url, Curl::DELETE);
$client->send();
Получение отправленных заголовков
Для получения заголовков, которые были отправлены в запросе, используется метод
$client->getRequestHeaders($key = null).
Получение всех заголовков:
$headers = $client->getRequestHeaders();
echo print_r($headers, true);
Получение конкретного заголовка:
$contentType = $client->getRequestHeaders('Content-Type');
echo $contentType;
Получение ответных заголовков
Для получения заголовков, которые были получены после выполнения запроса, используется метод
$client->getResponseHeaders($key = null).
Получение всех заголовков:
$headers = $client->getResponseHeaders();
echo print_r($headers, true);
Получение конкретного заголовка:
$contentType = $client->getResponseHeaders('Content-Type');
echo $contentType;
Получение кода ошибки
Получение кода ошибки после выполнения запроса осуществляется методом $client->getErrorCode():
$errorCode = $client->getErrorCode();
echo $errorCode;
Получение ошибки
Получение ошибки после выполнения запроса осуществляется методом $client->getError():
$error = $client->getError();
echo $error;
Получение результата
Получение результата после выполнения запроса осуществляется методом $client->getResult():
$result = $client->getResult();
echo $result;
Получение дополнительной информации
Получение дополнительной информации после выполнения запроса осуществляется методом
$client->getInfo($key):
$httpCode = $client->getInfo(CURLINFO_HTTP_CODE);
echo $httpCode;
Примеры запросов
-
Запрос GET с query-параметрами:
-
Код с запросом:
$client = new Curl('http://127.0.0.1/?limit=1&offset=0', Curl::GET); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send(); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$limit = $request->get('limit', Request::GET); $offset = $request->get('offset', Request::GET); echo sprintf('limit %d | offset %d', $limit, $offset);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => limit 1 | offset 0 [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:08:42 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 18 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос POST с multipart/form-data:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::POST); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'multipart' => [ 'name' => 'photo-1', 'file' => new CURLFile(ROOT_FULL_PATH . '/storage/photo.jpg') ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$name = $request->get('name', Request::POST); $uploadedFile = $request->get('file', Request::FILE); echo sprintf('name %s | file %s', $name, $uploadedFile[0]['tmp_name']);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Length] => 344 [Content-Type] => multipart/form-data; boundary=------------------------s7mZfMeEkch4F8AOj5uyPl ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => name photo-1 | file /tmp/phpg4n51f7qvuo85GGYdIC [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:12:32 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 47 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос POST с x-www-form-urlencoded:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::POST); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'form' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$name = $request->get('name', Request::POST); $email = $request->get('email', Request::POST); echo sprintf('name %s | email %s', $name, $email);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/x-www-form-urlencoded [Content-Length] => 28 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => name App | email app@mail.ru [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:15:57 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 28 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос POST с application/json:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::POST); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'json' => [ 'data' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$payload = $request->get('data', Request::POST); echo json_encode($payload);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/json [Content-Length] => 45 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => {"name":"App","email":"app@mail.ru"} [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:18:32 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 36 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос PUT с x-www-form-urlencoded:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::PUT); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'form' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$name = $request->get('name', Request::PUT); $email = $request->get('email', Request::PUT); echo sprintf('name %s | email %s', $name, $email);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/x-www-form-urlencoded [Content-Length] => 28 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => name App | email app@mail.ru [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:21:20 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 28 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос PUT с application/json:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::PUT); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'json' => [ 'data' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$payload = $request->get('data', Request::PUT); echo json_encode($payload);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/json [Content-Length] => 45 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => {"name":"App","email":"app@mail.ru"} [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:23:47 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 36 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос PATCH с x-www-form-urlencoded:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::PATCH); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'form' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$name = $request->get('name', Request::PATCH); $email = $request->get('email', Request::PATCH); echo sprintf('name %s | email %s', $name, $email);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/x-www-form-urlencoded [Content-Length] => 28 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => name App | email app@mail.ru [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:26:29 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 28 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос PATCH с application/json:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::PATCH); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'json' => [ 'data' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$payload = $request->get('data', Request::PATCH); echo json_encode($payload);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/json [Content-Length] => 45 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => {"name":"App","email":"app@mail.ru"} [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:28:48 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 36 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос DELETE с x-www-form-urlencoded:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::DELETE); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'form' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$name = $request->get('name', Request::DELETE); $email = $request->get('email', Request::DELETE); echo sprintf('name %s | email %s', $name, $email);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/x-www-form-urlencoded [Content-Length] => 28 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => name App | email app@mail.ru [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:31:20 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 28 [Content-Type] => text/html; charset=UTF-8 ) )
-
-
Запрос DELETE с application/json:
-
Код с запросом:
$client = new Curl('http://127.0.0.1', Curl::DELETE); $client->addOption(CURLOPT_FOLLOWLOCATION, true); $client->addHeader('Accept', '*/*'); $client->send([ 'json' => [ 'data' => [ 'name' => 'App', 'email' => 'app@mail.ru' ] ] ]); echo print_r([ 'RequestHeaders' => $client->getRequestHeaders(), 'ErrorCode' => $client->getErrorCode(), 'HttpCode' => $client->getInfo(CURLINFO_HTTP_CODE), 'Error' => $client->getError(), 'Result' => $client->getResult(), 'ResponseHeaders' => $client->getResponseHeaders(), ], true); -
Код/Результат:
$payload = $request->get('data', Request::DELETE); echo json_encode($payload);Array ( [RequestHeaders] => Array ( [Host] => 127.0.0.1 [Accept] => */* [Content-Type] => application/json [Content-Length] => 45 ) [ErrorCode] => 0 [HttpCode] => 200 [Error] => [Result] => {"name":"App","email":"app@mail.ru"} [ResponseHeaders] => Array ( [Date] => Wed, 11 Mar 2026 13:33:35 GMT [Server] => Apache/2.4.66 (Debian) [X-Powered-By] => PHP/8.4.18 [Content-Length] => 36 [Content-Type] => text/html; charset=UTF-8 ) )
-