К содержанию
Meduza
Документация

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
          )
      )