PHPackages                             fi1a/http-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [HTTP &amp; Networking](/categories/http)
4. /
5. fi1a/http-client

ActiveLibrary[HTTP &amp; Networking](/categories/http)

fi1a/http-client
================

PHP HTTP-client

0192PHP

Since Feb 22Pushed 3y ago1 watchersCompare

[ Source](https://github.com/fi1a/http-client)[ Packagist](https://packagist.org/packages/fi1a/http-client)[ RSS](/packages/fi1a-http-client/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

PHP HTTP-client
===============

[](#php-http-client)

[![Latest Version](https://camo.githubusercontent.com/e1e92b683a493673d1f264f9511d637b68f5a5ce4d7a78547bcba3ce71fb0524/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666931612f687474702d636c69656e743f6c6162656c3d72656c65617365)](https://packagist.org/packages/fi1a/http-client)[![Software License](https://camo.githubusercontent.com/f16f3c8ecbb53f7866416d361019a780079b0b2317d464836265ecee82d04fc0/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f666931612f687474702d636c69656e743f7374796c653d666c61742d737175617265)](https://github.com/fi1a/http-client/blob/master/LICENSE)[![PHP Version](https://camo.githubusercontent.com/6968f67fdcb9050298bd6f2e63752ec8ceb58be72ac391feeb0cfe742d78a30a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f666931612f687474702d636c69656e743f7374796c653d666c61742d737175617265)](https://php.net)[![Coverage Status](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)[![Total Downloads](https://camo.githubusercontent.com/a86695cc7de049667aa2764e506b491525d331a22d9123cf18fef17a44f888f0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666931612f687474702d636c69656e742e7376673f7374796c653d666c61742d73717561726526636f6c6f72423d6d656469756d76696f6c6574726564)](https://packagist.org/packages/fi1a/http-client)[![Support mail](https://camo.githubusercontent.com/116fa0d447870a3a6c6c1f4b296c889707a6e30a69c2b28cbe8d0f6f5c3d4920/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696c2d737570706f7274253430666931612e72752d627269676874677265656e)](mailto:support@fi1a.ru)

Библиотека HTTP-клиента для PHP 7.3+, которая упрощает отправку HTTP-запросов и интеграцию с веб-сервисами.

Возможности:

- Указание заголовков при запросе;
- Поддержка методов HTTP (GET, PUT, POST, DELETE, HEAD, PATCH и OPTIONS);
- Автоматическая сериализация тела запроса и ответа;
- Наличие middleware для запросов и ответов позволяет дополнять и формировать поведение HTTP-клиента;
- Поставляются middleware для реализации авторизации (ApiKey, Basic, Bearer);
- Имеет слой абстракции, позволяя писать код, не зависящий от среды и транспорта (нет жесткой привязки к cURL или потокам PHP);
- Поддержка cookies;
- Поддержка proxy (http и socks5 proxy).

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\Http\MimeInterface;
use Fi1a\Http\Uri;

$client = new HttpClient();

$uri = new Uri('https://httpbin.org/get');
$uri = $uri->withQueryParams(['foo' => 'bar']);

$response = $client->get($uri, MimeInterface::JSON);

$response->getStatusCode(); // 200
$response->getLastHeader('Content-Type')->getValue(); // application/json
$json = $response->getBody()->get();
$json['args']['foo']; // bar
```

Установка
---------

[](#установка)

Установить этот пакет можно как зависимость, используя Composer.

```
composer require fi1a/http-client
```

Запросы с помощью HttpClient
----------------------------

[](#запросы-с-помощью-httpclient)

Вы можете отправлять запросы, используя объект `Fi1a\HttpClient\HttpClientInterface`.

### Создание клиента

[](#создание-клиента)

```
use Fi1a\HttpClient\Config;
use Fi1a\HttpClient\Handlers\StreamHandler;
use Fi1a\HttpClient\HttpClient;

$client = new HttpClient(
    new Config([
        'sslVerify' => false,
        'timeout' => 2,
        'cookie' => false,
    ]),
    StreamHandler::class,
    new CookieStorage()
);
```

Конструктор клиента принимает:

- Объект настроек `Fi1a\HttpClient\ConfigInterface`;
- Класс обработчика запросов `Fi1a\HttpClient\Handlers\HandlerInterface`;
- Класс для хранения cookie `Fi1a\HttpClient\Cookie\CookieStorageInterface`.

Из этих аргументов обязательным являются только первые два (объект настроек и класс обработчика запросов).

Доступны два класса обработчиков запросов:

- `Fi1a\HttpClient\Handlers\StreamHandler` - на основе потоков PHP;
- `Fi1a\HttpClient\Handlers\CurlHandler` - на основе cURL.

### Отправка запросов

[](#отправка-запросов)

Методы упрощающие конфигурирование и отправку запроса:

МетодОписаниеget($uri, ?string $mime = null): ResponseInterfaceHTTP Метод Getpost($uri, $body = null, ?string $mime = null, ?UploadFileCollectionInterface $files = null): ResponseInterfaceHTTP Метод Postput($uri, $body = null, ?string $mime = null, ?UploadFileCollectionInterface $files = null): ResponseInterfaceHTTP Метод Putpatch($uri, $body = null, ?string $mime = null, ?UploadFileCollectionInterface $files = null): ResponseInterfaceHTTP Метод Patchdelete($uri, ?string $mime = null): ResponseInterfaceHTTP Метод Deletehead($uri): ResponseInterfaceHTTP Метод Headoptions($uri): ResponseInterfaceHTTP Метод Options```
use Fi1a\HttpClient\HttpClient;

$client = new HttpClient();

$response = $client->get('https://httpbin.org/get');
$response = $client->post('https://httpbin.org/post');
$response = $client->put('https://httpbin.org/put');
$response = $client->delete('https://httpbin.org/delete');
$response = $client->head('https://httpbin.org/get');
$response = $client->patch('https://httpbin.org/patch');
$response = $client->options('https://httpbin.org/get');
```

Объект настроек
---------------

[](#объект-настроек)

Объект настроек `Fi1a\HttpClient\ConfigInterface` передается в качестве аргумента конструктору класса `Fi1a\HttpClient\HttpClientInterface`и может содержать следующие опции:

- sslVerify (true) - проверка сертификата при https соединении;
- timeout (10) - таймаут запросов;
- compress (null) - если значение задано, то выставляется заголовок Accept-Encoding (доступное значение - "gzip");
- allowRedirects (true) - автоматическое следование перенаправлениям;
- maxRedirects (10) - максимальное число перенаправлений;
- cookie (false) - определяет использование cookie.

```
use Fi1a\HttpClient\Config;
use Fi1a\HttpClient\HttpClient;

$client = new HttpClient(
    new Config([
        'sslVerify' => false,
        'timeout' => 2,
        'cookie' => false,
    ])
);
```

Использование запроса
---------------------

[](#использование-запроса)

Объекты запросов `Fi1a\HttpClient\RequestInterface` обеспечивают большую гибкость в том как передается запрос, включая параметры запроса, middleware, cookie и т.п. Данный объект является неизменяемым (immutable).

МетодОписаниеcreate()Создать объект запросаwithMethod(string $method)Метод запросаgetMethod(): stringВозвращает метод запросаget($uri, ?string $mime = null)HTTP Метод Getpost($uri, $body = null, ?string $mime = null, ?UploadFileCollectionInterface $files = null)HTTP Метод Postput($uri, $body = null, ?string $mime = null, ?UploadFileCollectionInterface $files = null)HTTP Метод Putpatch($uri, $body = null, ?string $mime = null, ?UploadFileCollectionInterface $files = null)HTTP Метод Patchdelete($uri, ?string $mime = null)HTTP Метод Deletehead($uri)HTTP Метод Headoptions($uri)HTTP Метод OptionsgetUri(): UriInterfaceВозвращает URI запросаwithUri(UriInterface $uri)Устанавливает URI запросаwithMime(?string $mime = null)Устанавливаем Content type и Expected typewithExpectedType(?string $mime = null)Устанавливаем expected typegetExpectedType(): ?stringExpected typewithBody($body, ?string $mime = null, ?UploadFileCollectionInterface $files = null)Тело запросаgetBody(): RequestBodyInterfaceВозвращает тело запросаwithMiddleware(MiddlewareInterface $middleware, ?int $sort = null)Добавить промежуточное ПОgetMiddlewares(): MiddlewareCollectionInterfaceВозвращает промежуточное ПОwithProxy(?ProxyInterface $proxy)Использовать прокси для соединенияgetProxy(): ?ProxyInterfaceВозвращает проксиgetProtocolVersion(): stringВозвращает версию протокола HTTPwithProtocolVersion(string $version)Устанавливает версию протокола HTTPgetEncoding(): stringВозвращает кодировкуwithEncoding(string $encoding)Устанавливает кодировкуgetHeaders(): HeaderCollectionInterfaceВозвращает коллекцию заголовковwithHeaders(HeaderCollectionInterface $headers)Устанавливает коллекцию заголовковaddHeader(HeaderInterface $header)Добавить заголовок к коллекцииhasHeader(string $name): boolПроверяет наличие заголовка с определенным именемgetHeader(string $name): HeaderCollectionInterfaceВозвращает заголовок с определенным именемgetFirstHeader(string $name): ?HeaderInterfaceВозвращает первый найденный заголовок с определенным именемgetLastHeader(string $name): ?HeaderInterfaceВозвращает последний найденный заголовок с определенным именемwithHeader(string $name, string $value)Добавляет заголовок с определенным именем и значениемwithoutHeader(string $name)Удаляет заголовок с определенным именемclearHeaders()Удаляет все заголовкиgetCookies(): CookieCollectionInterfaceВозвращает коллекцию cookiesaddCookie(string $name, string $value)Добавляет и возвращает куку к запросуwithCookies(CookieCollectionInterface $collection)Устанавливает коллекцию cookiesВы можете создать и сконфигурировать запрос, а затем отправить его:

```
use Fi1a\Http\Uri;
use Fi1a\HttpClient\HttpClient;
use Fi1a\Http\HttpInterface;
use Fi1a\Http\MimeInterface;
use Fi1a\HttpClient\Request;

$client = new HttpClient();

$request = Request::create()
    ->withMethod(HttpInterface::GET)
    ->withUri(new Uri('https://httpbin.org/get'))
    ->withExpectedType(MimeInterface::JSON);

$response = $client->send($request);
```

### Тело запроса

[](#тело-запроса)

Тело запроса релизованно классом `Fi1a\HttpClient\RequestBodyInterface` и имеет следующие методы:

МетодОписаниеsetBody($raw, ?string $mime = null, ?UploadFileCollectionInterface $files = null): voidУстановить тело запросаget(): stringВозвращает тело запросаgetRaw()Возвращает тело запроса без примененного преобразованияgetSize(): intВозвращает размер тела запросаhas(): boolЕсть тело запроса или нетsetUploadFiles(?UploadFileCollectionInterface $files)Прикрепить файлы к телу запросаaddUploadFile(string $name, FileInterface $file)Добавить загружаемый файлgetUploadFiles(): UploadFileCollectionInterfaceВозвращает прикрепленные файлыgetContentTypeHeader(): ?stringContent type для заголовковsetContentType(?string $mime = null)Устанавливаем content type### Заголовки запроса

[](#заголовки-запроса)

Для отправки заголовков вместе с запросом, можно использовать метод `withHeader`. Пример:

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Request;

$client = new HttpClient();

$request = Request::create()
    ->get('https://httpbin.org/headers')
    ->withHeader('X-Header', 'headerValue');

$response = $client->send($request);

$response->getStatusCode(); // 200
```

Также доступны другие методы связанные с заголовками у класса запроса `Fi1a\HttpClient\RequestInterface`:

МетодОписаниеgetHeaders(): HeaderCollectionInterfaceВозвращает коллекцию заголовковwithHeaders(HeaderCollectionInterface $headers)Устанавливает коллекцию заголовковaddHeader(HeaderInterface $header)Добавить заголовок к коллекцииhasHeader(string $name): boolПроверяет наличие заголовка с определенным именемgetHeader(string $name): HeaderCollectionInterfaceВозвращает заголовок с определенным именемgetFirstHeader(string $name): ?HeaderInterfaceВозвращает первый найденный заголовок с определенным именемgetLastHeader(string $name): ?HeaderInterfaceВозвращает последний найденный заголовок с определенным именемwithHeader(string $name, string $value)Добавляет заголовок с определенным именем и значениемwithAddedHeader(string $name, string $value): HeaderInterfaceДобавляет заголовок с определенным именем и значением и возвращает объект заголовкаwithoutHeader(string $name): boolУдаляет заголовок с определенным именемclearHeaders(): boolУдаляет все заголовкиИспользование ответа
--------------------

[](#использование-ответа)

Объект ответа реализует `Fi1a\HttpClient\ResponseInterface` и содержит информацию полученную в результате выполнения запроса. Данный объект является неизменяемым (immutable).

Получить код состояния и фразу ответа:

```
$code = $response->getStatusCode(); // 200
$reason = $response->getReasonPhrase(); // OK
```

Заголовки ответа:

```
if ($response->hasHeader('Content-Length')) {
    $response->getLastHeader('Content-Length')->getValue(); // 233
}

$response->getHeaders()->join(PHP_EOL);
//Content-Type: application/json
//Content-Length: 233
//...
```

Методы класса `Fi1a\HttpClient\ResponseInterface`, реализующего ответ на запрос:

МетодОписаниеgetStatusCode(): intКод статусаgetReasonPhrase(): ?stringТекст причины ассоциированный с кодом статусаwithStatus(int $statusCode, string $reasonPhrase = '')Установить код статусаhasErrors(): boolЗапрос выполнен с ошибкой или нетisSuccess(): boolЗапрос выполнен успешно или нетwithBody(string $rawBody, ?string $mime = null)Установить тело ответаgetBody(): ResponseBodyInterfaceВозвращает тело ответаgetProtocolVersion(): stringВозвращает версию протокола HTTPwithProtocolVersion(string $version)Устанавливает версию протокола HTTPgetEncoding(): stringВозвращает кодировкуwithEncoding(string $encoding)Устанавливает кодировкуgetHeaders(): HeaderCollectionInterfaceВозвращает коллекцию заголовковwithHeaders(HeaderCollectionInterface $headers)Устанавливает коллекцию заголовковaddHeader(HeaderInterface $header)Добавить заголовок к коллекцииhasHeader(string $name): boolПроверяет наличие заголовка с определенным именемgetHeader(string $name): HeaderCollectionInterfaceВозвращает заголовок с определенным именемgetFirstHeader(string $name): ?HeaderInterfaceВозвращает первый найденный заголовок с определенным именемgetLastHeader(string $name): ?HeaderInterfaceВозвращает последний найденный заголовок с определенным именемwithHeader(string $name, string $value)Добавляет заголовок с определенным именем и значениемwithAddedHeader(string $name, string $value): HeaderInterfaceДобавляет заголовок с определенным именем и значением и возвращает объект заголовкаwithoutHeader(string $name): boolУдаляет заголовок с определенным именемclearHeaders(): boolУдаляет все заголовкиgetCookies(): CookieCollectionInterfaceВозвращает коллекцию cookieswithCookies(CookieCollectionInterface $collection)Устанавливает коллекцию cookiesТело ответа можно получить с помощью метода getBody:

```
use Fi1a\Http\Uri;
use Fi1a\HttpClient\HttpClient;
use Fi1a\Http\HttpInterface;
use Fi1a\Http\MimeInterface;
use Fi1a\HttpClient\Request;

$client = new HttpClient();

$request = Request::create()
    ->withMethod(HttpInterface::GET)
    ->withUri(new Uri('https://httpbin.org/get'))
    ->withExpectedType(MimeInterface::JSON);

$response = $client->send($request);

if ($response->getBody()->has()) {
    $response->getBody()->get(); // array
    $response->getBody()->getRaw(); // string
}
```

Тело ответа релизованно классом `Fi1a\HttpClient\ResponseBodyInterface` и имеет следующие методы:

МетодОписаниеsetBody(string $raw, ?string $mime = null): voidУстановить тело ответаget()Возвращает тело ответаgetRaw(): stringВозвращает тело ответа без примененного преобразованияhas(): boolЕсть тело ответа или нетgetSize(): intВозвращает размер тела ответаsetContentType(?string $mime = null)Устанавливаем content typegetContentType(): ?stringContent typeКириллический домен
-------------------

[](#кириллический-домен)

Кириллический домен — это название сайта на русском языке (например, домен.рф) в формате IDNA ASCII. Преобразование доменного имени в формат IDNA ASCII осуществляется с помощью функции `idn_to_ascii`входящей в модуль [интернационализации (Intl)](https://www.php.net/manual/ru/book.intl.php) php. Поэтому для работы с кирилическими доменами необходим установленный этот модуль.

URI и параметры GET запроса
---------------------------

[](#uri-и-параметры-get-запроса)

Для конфигурирования адреса и параметров GET запроса нужно использовать класс `Fi1a\HttpClient\UriInterface`. Задать параметры GET запроса можно несколькими способами.

В адресе запроса:

```
use Fi1a\Http\Uri;

$uri = new Uri('https://httpbin.org/get?foo=bar&baz=qux');

$response = $client->get($uri);
```

Строкой с помощью метода `withQuery`:

```
use Fi1a\Http\Uri;

$uri = new Uri('https://httpbin.org/get');
$uri = $uri->withQuery('foo=bar&baz=qux');

$response = $client->get($uri);
```

Массивом с помощью метода `withQueryParams`:

```
use Fi1a\Http\Uri;

$uri = new Uri('https://httpbin.org/get');
$uri = $uri->withQueryParams([
    'foo' => 'bar',
    'baz' => 'qux',
]);

$response = $client->get($uri);
```

Доступные методы `Fi1a\HttpClient\UriInterface`:

МетодОписание\_\_construct(string $uri = '', array $variables = \[\])Конструкторscheme(): stringСхемаwithScheme(string $scheme)Задать схемуuserInfo(): stringКомпонент информации о пользователе URIuser(): stringВозвращает имя пользователяpassword(): ?stringВозвращает парольwithUserInfo(string $user, ?string $password = null)Задать информацию о пользователеhost(): stringХостwithHost(string $host)Задать хостport(): ?intПортwithPort(?int $port)Задать портpath(): stringЧасть пути URIwithPath(string $path)Установить часть пути URIquery(): stringСтрока запроса в URIwithQuery(string $query)Задать строку запроса URIqueryParams(): arrayМассив запроса в URIwithQueryParams(array $queryParams)Задать массив запроса в URIfragment(): stringФрагмент URIwithFragment(string $fragment)Задать фрагмент URIurl(): stringВозвращает URLuri(): stringВозвращает URIauthority(): stringКомпонент полномочий URImaskedUri(): stringВозвращает URI с маской на данных авторизацииreplace(string $uri = '', array $variables = \[\])Заменить адрес переданным значениемОтправить POST/Form запрос
--------------------------

[](#отправить-postform-запрос)

Для отправки POST-запросов application/x-www-form-urlencoded необходимо указать поля POST в виде массива в методе `post`.

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\Http\MimeInterface;

$client = new HttpClient();

$response = $client->post(
    'https://httpbin.org/post',
    [
        'foo' => 'bar',
    ],
    MimeInterface::FORM
);
```

Отправить JSON строку в теле запроса
------------------------------------

[](#отправить-json-строку-в-теле-запроса)

Для отправки данных в теле запроса следует задать значение в классе `Fi1a\HttpClient\RequestBodyInterface`. Пример отправки JSON строки методом POST:

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\Http\MimeInterface;
use Fi1a\HttpClient\Request;

$client = new HttpClient();

$request = Request::create()->post('https://httpbin.org/post');
$request->getBody()->setBody(['foo' => 'bar'], MimeInterface::JSON);

$response = $client->send($request);
```

Отправить файлы через POST-запрос
---------------------------------

[](#отправить-файлы-через-post-запрос)

Для того чтобы отправить файлы через POST-запрос, следует передать коллекцию подготовленных файлов `Fi1a\HttpClient\UploadFileCollectionInterface`. Для обеспечения абстракции файловой системы используются классы пакета [fi1a/filesystem](https://github.com/fi1a/filesystem)

Отправить файлы через POST-запрос:

```
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;
use Fi1a\HttpClient\HttpClient;
use Fi1a\Http\MimeInterface;
use Fi1a\HttpClient\UploadFile;
use Fi1a\HttpClient\UploadFileCollection;

$client = new HttpClient();

$filesystem = new Filesystem(new LocalAdapter(__DIR__));
$files = new UploadFileCollection();
$files[] = new UploadFile('fooFile', $filesystem->factoryFile('./fooFile.txt'));
$files[] = new UploadFile('barFile', $filesystem->factoryFile('./barFile.txt'));

$response = $client->post(
    'https://httpbin.org/post',
    [
        'foo' => 'bar',
    ],
    MimeInterface::UPLOAD,
    $files
);
```

Cookies
-------

[](#cookies)

Пакет поддерживает использования cookies. Для использования cookies следует передать в конфигурации параметр `'cookie' => true`.

Пример с получением и установкой новой cookie приведен ниже:

```
use Fi1a\Config\Parsers\JSONParser;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Config\Writers\FileWriter;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;
use Fi1a\HttpClient\Config;
use Fi1a\HttpClient\Cookie\ConfigCookieStorage;
use Fi1a\HttpClient\Handlers\StreamHandler;
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Request;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));
$file = $filesystem->factoryFile('./cookie.json');

$cookieStorage = new ConfigCookieStorage(
    new FileReader($file),
    new FileWriter($file),
    new JSONParser()
);

$client = new HttpClient(
    new Config([
        'cookie' => true,
    ]),
    StreamHandler::class,
    $cookieStorage
);

$response = $client->get('https://httpbin.org/cookies/set/cookieName1/cookieValue1');
$response->getCookies(); // Fi1a\HttpClient\Cookie\CookieCollection

// Установить новую cookie
$request = Request::create()
    ->get('https://httpbin.org/cookies');
$request->addCookie('cookieName2', 'cookieValue2');

$response = $client->send($request);
$response->getCookies(); // Fi1a\HttpClient\Cookie\CookieCollection
```

Доступны два варианта хранения cookies:

- `Fi1a\HttpClient\Cookie\CookieStorageInterface` - хранение cookies в рамках одной сессии (по умолчанию);
- `Fi1a\HttpClient\Cookie\ConfigCookieStorageInterface` - хранение cookies в конфигурационных файлах.

Для хранение cookies в конфигурационных файлах используются классы пакета [fi1a/config](https://github.com/fi1a/config).

Вы можете получить cookie по его имени с помощью метода `getByName(string $name)`, который возвращает экземпляр `Fi1a\HttpClient\Cookie\CookieInterface`.

```
$cookies = $response->getCookies(); // Fi1a\HttpClient\Cookie\CookieCollection
$cookie = $cookies->getByName('cookieName2');
$cookie->getValue(); // cookieValue2
```

Удаление cookie осуществляется из хранилища cookies методом `deleteCookie`. Пример:

```
use Fi1a\Config\Parsers\JSONParser;
use Fi1a\Config\Readers\FileReader;
use Fi1a\Config\Writers\FileWriter;
use Fi1a\Filesystem\Adapters\LocalAdapter;
use Fi1a\Filesystem\Filesystem;
use Fi1a\HttpClient\Config;
use Fi1a\HttpClient\Cookie\ConfigCookieStorage;
use Fi1a\HttpClient\Handlers\StreamHandler;
use Fi1a\HttpClient\HttpClient;

$filesystem = new Filesystem(new LocalAdapter(__DIR__));
$file = $filesystem->factoryFile('./cookie.json');

$cookieStorage = new ConfigCookieStorage(
    new FileReader($file),
    new FileWriter($file),
    new JSONParser()
);

$client = new HttpClient(
    new Config([
        'cookie' => true,
    ]),
    StreamHandler::class,
    $cookieStorage
);

$cookieStorage->deleteCookie('cookieName2');
```

Доступные методы `Fi1a\HttpClient\Cookie\CookieInterface`:

МетодОписаниеgetName(): ?stringВозвращает имяsetName(?string $name)Устанавливает имяgetValue(): ?stringВозвращает значениеsetValue(?string $value)Устанавливает значениеgetDomain(): ?stringВозвращает доменsetDomain(?string $domain)Устанавливает доменgetPath(): stringВозвращает путьsetPath(string $path)Устанавливает путьgetMaxAge(): ?intВремя жизни cookie в секундахsetMaxAge(?int $maxAge)Время жизни cookie в секундахgetExpires(): ?intUNIX timestamp когда cookie истечетsetExpires($timestamp)UNIX timestamp когда cookie истечетisExpired(): boolИстекла cookie или нетgetSecure(): boolФлаг securesetSecure(bool $secure)Флаг securegetHttpOnly(): boolФлаг HttpOnlysetHttpOnly(bool $httpOnly)Флаг HttpOnlygetSession(): boolДействует только на эту сессиюsetSession(bool $secure)Действует только на эту сессиюmatchDomain(string $domain): boolПроверяет, соответствует ли доменmatchPath(string $path): boolПроверяет, соответствует ли путиvalidate(): voidВалидация cookie::fromString(string $string)Создать cookie из строкиРедиректы
---------

[](#редиректы)

Если опция `allowRedirects` в конфигурации выставлена в `true`, то будет осуществлено автоматическое следование перенаправлениям (по умолчанию true). Также доступна опция `maxRedirects`, определяющая максимальное количество переходов по перенаправлениям (по умолчанию равно 10).

```
use Fi1a\HttpClient\Config;
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Handlers\Exceptions\ErrorException;

$client = new HttpClient(
    new Config([
        'allowRedirects' => true,
        'maxRedirects' => 6,
    ])
);

$response = $client->get('https://httpbin.org/redirect/5');
$response->getStatusCode(); // 200
```

Исключение при превышении установленного лимита на количество перенаправлений:

```
try {
    $response = $client->get('https://httpbin.org/redirect/10');
} catch (ErrorException $exception) {
    echo $exception->getMessage(); // Максимальное число редиректов 6 было достигнуто
}
```

Автоматическое следование перенаправлениям отключено:

```
$client->getConfig()->setAllowRedirects(false);
$response = $client->get('https://httpbin.org/redirect/5');
$response->getStatusCode(); // 302
```

Прокси
------

[](#прокси)

Пакет предоставляет возможность использовать HTTP и Socks5 прокси при запросах. Установить прокси можно с помощью метода `setProxy` класса `Fi1a\HttpClient\HttpClientInterface`. Данный метод принимает объект, реализующий интерфейс `Fi1a\HttpClient\Proxy\ProxyInterface`.

- `Fi1a\HttpClient\Proxy\HttpProxy` - реализует HTTP прокси;
- `Fi1a\HttpClient\Proxy\Socks5Proxy` - реализует Socks5 прокси.

Пример использования HTTP прокси:

```
use Fi1a\HttpClient\Config;
use Fi1a\HttpClient\Handlers\CurlHandler;
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Proxy\HttpProxy;

$client = new HttpClient(new Config(), CurlHandler::class);
$client->setProxy(new HttpProxy('127.0.0.1', 50100, 'user1', 'password1'));

$response = $client->get('https://httpbin.org/get');
$response->getStatusCode(); // 200
```

Пример использования Socks5 прокси:

```
use Fi1a\HttpClient\Config;
use Fi1a\HttpClient\Handlers\CurlHandler;
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Proxy\Socks5Proxy;

$client = new HttpClient(new Config(), CurlHandler::class);

$client->setProxy(new Socks5Proxy('127.0.0.1', 50101, 'user1', 'password1'));

$response = $client->get('https://httpbin.org/get');
$response->getStatusCode(); // 200
```

Промежуточное ПО (middleware)
-----------------------------

[](#промежуточное-по-middleware)

Промежуточное ПО (middleware) расширяет функциональные возможности. Они вызываются в процессе генерации запросов и ответов. Промежуточное ПО (middleware) должно реализовывать интерфейс `Fi1a\HttpClient\Middlewares\MiddlewareInterface`. В процессе генерации запроса вызывается метод `handleRequest` с параметрами (RequestInterface $request, ResponseInterface $response, HttpClientInterface $httpClient), а ответа `handleResponse`с параметрами (RequestInterface $request, ResponseInterface $response, HttpClientInterface $httpClient).

Для всех запросов можно добавить промежуточное ПО (middleware) с помощью метода `addMiddleware` класса `Fi1a\HttpClient\HttpClientInterface`.

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Middlewares\BasicAuthMiddleware;

$client = new HttpClient();

$client->addMiddleware(new BasicAuthMiddleware('user1', 'password1'));
$response = $client->get('https://httpbin.org/hidden-basic-auth/user1/password1');
$response->getStatusCode(); // 200
```

Для одного запроса можно добавить промежуточное ПО (middleware) с помощью метода `withMiddleware` класса запроса `Fi1a\HttpClient\RequestInterface`.

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Middlewares\BasicAuthMiddleware;
use Fi1a\HttpClient\Request;

$client = new HttpClient();

$request = Request::create()
    ->withMiddleware(new BasicAuthMiddleware('user1', 'password1'))
    ->get('https://httpbin.org/hidden-basic-auth/user1/password1');
$response = $client->send($request);

$response->getStatusCode(); // 200
```

### Авторизация по ключу (ApiKeyAuthMiddleware)

[](#авторизация-по-ключу-apikeyauthmiddleware)

Данное промежуточное ПО (middleware) реализует авторизацию по ключу. Ключ можно передать в заголовке или как GET параметр.

АргументОписаниеstring $keyНазвание ключаstring $valueЗначение ключаstring $placeГде передать ключ (в заголовке ApiKeyAuthMiddleware::IN\_HEADER или как GET параметр ApiKeyAuthMiddleware::IN\_QUERY)```
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Middlewares\ApiKeyAuthMiddleware;

$client = new HttpClient();

$response = $client->addMiddleware(
    new ApiKeyAuthMiddleware('token', 'api-token', ApiKeyAuthMiddleware::IN_HEADER)
)->get('https://some-domain.ru/api-key-auth');

$response->getStatusCode(); // 200
```

### Basic авторизация (BasicAuthMiddleware)

[](#basic-авторизация-basicauthmiddleware)

Данное промежуточное ПО (middleware) реализует Basic авторизацию.

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Middlewares\BasicAuthMiddleware;

$client = new HttpClient();

$response = $client->addMiddleware(
    new BasicAuthMiddleware('user1', 'password1')
)->get('https://httpbin.org/hidden-basic-auth/user1/password1');

$response->getStatusCode(); // 200
```

### Bearer авторизация (BearerAuthMiddleware)

[](#bearer-авторизация-bearerauthmiddleware)

Данное промежуточное ПО (middleware) реализует Bearer авторизацию.

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Middlewares\BearerAuthMiddleware;

$client = new HttpClient();

$response = $client->addMiddleware(
    new BearerAuthMiddleware('token')
)->get('https://domain.ru/bearer-auth');

$response->getStatusCode(); // 200
```

### Повторная отправка запросов при ошибке (RetryMiddleware)

[](#повторная-отправка-запросов-при-ошибке-retrymiddleware)

При статусе &gt;= 400 осуществляет повторную отправку запроса. Количество попыток повторной отправки запроса передается в конструкторе первым аргументом.

```
use Fi1a\HttpClient\HttpClient;
use Fi1a\HttpClient\Middlewares\RetryMiddleware;

$client = new HttpClient();

$response = $client->addMiddleware(
    new RetryMiddleware(3)
)->get('https://httpbin.org/status/400');

$response->getStatusCode(); // 400
```

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity23

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/d4f26c1adaa632741fadf55b1328cbd22ac91282aecfae2027d105df0ddedee4?d=identicon)[fi1a](/maintainers/fi1a)

---

Tags

http-clientphp

### Embed Badge

![Health badge](/badges/fi1a-http-client/health.svg)

```
[![Health](https://phpackages.com/badges/fi1a-http-client/health.svg)](https://phpackages.com/packages/fi1a-http-client)
```

###  Alternatives

[friendsofsymfony/rest-bundle

This Bundle provides various tools to rapidly develop RESTful API's with Symfony

2.8k73.3M317](/packages/friendsofsymfony-rest-bundle)[php-http/discovery

Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations

1.3k309.5M1.2k](/packages/php-http-discovery)[nyholm/psr7

A fast PHP7 implementation of PSR-7

1.3k235.4M2.4k](/packages/nyholm-psr7)[pusher/pusher-php-server

Library for interacting with the Pusher REST API

1.5k94.8M292](/packages/pusher-pusher-php-server)[spatie/crawler

Crawl all internal links found on a website

2.8k16.3M52](/packages/spatie-crawler)[react/http

Event-driven, streaming HTTP client and server implementation for ReactPHP

78126.4M414](/packages/react-http)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
