PHPackages                             fi1a/http - 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

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

fi1a/http
=========

PHP абстракция для HTTP-запроса (request), ответа (response), сессии (session) и cookies.

0457PHP

Since Feb 25Pushed 3y ago1 watchersCompare

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

READMEChangelogDependenciesVersions (1)Used By (0)

PHP абстракция для HTTP-запроса (request), ответа (response), сессии (session) и cookies.
=========================================================================================

[](#php-абстракция-для-http-запроса-request-ответа-response-сессии-session-и-cookies)

[![Latest Version](https://camo.githubusercontent.com/c3e29971586cef0b66b7d57def050c61bf78ca0fc772ac8eadda97a5d4676122/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f666931612f687474703f6c6162656c3d72656c65617365)](https://packagist.org/packages/fi1a/http)[![Software License](https://camo.githubusercontent.com/851a9c657840bfd556c4fccac1f5972415c2682ca719e50da522127dfc8ba5af/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f666931612f687474703f7374796c653d666c61742d737175617265)](https://github.com/fi1a/http/blob/master/LICENSE)[![PHP Version](https://camo.githubusercontent.com/532183c7e875af75b5dddbf98eed97de023a1f77f0a4ad6f1991ff166cc575d7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f666931612f687474703f7374796c653d666c61742d737175617265)](https://php.net)[![Coverage Status](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)](https://camo.githubusercontent.com/0c967d746eb7f4fe28065a3b94d23faa207cd6f4a968535b20fce0310a87cf89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f7665726167652d3130302532352d677265656e)[![Total Downloads](https://camo.githubusercontent.com/6ced4931c90f55762a9836aa4055d41cd6b93b14443788cd4ee3cad218091e3e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f666931612f687474702e7376673f7374796c653d666c61742d73717561726526636f6c6f72423d6d656469756d76696f6c6574726564)](https://packagist.org/packages/fi1a/http)[![Support mail](https://camo.githubusercontent.com/116fa0d447870a3a6c6c1f4b296c889707a6e30a69c2b28cbe8d0f6f5c3d4920/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d61696c2d737570706f7274253430666931612e72752d627269676874677265656e)](mailto:support@fi1a.ru)

В PHP HTTP-запрос (request) представлен глобальными переменными ($\_GET, $\_POST, $\_FILES, $\_COOKIE, $\_SESSION, ...), а ответ (response) генерируется функциями (echo, header(), setcookie(), ...)

Данный пакет заменяет эти стандартные глобальные переменные и функции PHP объектно-ориентированным слоем, инкапсулируя HTTP-запрос (request) и ответ (response) в объекты `Fi1a\Http\RequestInterface` и `Fi1a\Http\ResponseInterface`, которые предлагают удобный API для работы с ними.

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

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

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

```
composer require fi1a/http
```

Хелперы
-------

[](#хелперы)

В пакете доступны следующие хелперы:

- http(): HttpInterface - хелпер для HttpInterface;
- request(?RequestInterface $request = null): RequestInterface - хелпер для текушего запроса;
- response(?ResponseInterface $response = null): ResponseInterface - хелпер для текушего ответа;
- session(?SessionStorageInterface $session = null): SessionStorageInterface - хелпер для доступа к сессии;
- buffer(?BufferOutputInterface $buffer = null): BufferOutputInterface - хелпер для буферизированного вывода;
- redirect($location = null, ?int $status = null, $headers = \[\]): RedirectResponse - возвращает ответ для реализации перенаправления;
- json($data = null, ?int $status = null, $headers = \[\]): JsonResponseInterface - возвращает JSON-ответ.

Dependency injection
--------------------

[](#dependency-injection)

Контейнер dependency injection из пакета [fi1a/dependency-injection](https://github.com/fi1a/dependency-injection)

Для интерфейсов, в контейнере dependency injection, доступны следующие определения:

- Fi1a\\Http\\HttpInterface;
- Fi1a\\Http\\RequestInterface;
- Fi1a\\Http\\ResponseInterface;
- Fi1a\\Http\\Session\\SessionStorageInterface;
- Fi1a\\Http\\BufferOutputInterface;
- Fi1a\\Http\\RedirectResponseInterface;
- Fi1a\\Http\\JsonResponseInterface.

```
di()->get(Fi1a\Http\RequestInterface::class)->all();
```

HTTP-запрос
-----------

[](#http-запрос)

HTTP-запрос — это объект реализующий интерфейс `Fi1a\Http\RequestInterface`. HTTP-запрос является не изменяемым, у него нет сеттеров. Для доступа к текущему запросу можно использовать хелпер `request()`.

```
request()->query()->get('foo'); // bar
```

Доступные методы `Fi1a\Http\RequestInterface`:

МетодОписаниеpost(): PathAccessInterfaceВозвращает POSTquery(): PathAccessInterfaceВозвращает GET значенияall(): PathAccessInterfaceВсе значения из GET, POST, FILES, BODYonly(array $keys): PathAccessInterfaceТолько переданные ключи из GET и POSTfiles(): UploadFileCollectionInterfaceВозвращает файлыwithRawBody($body)Устанавливает содержаниеrawBody()Возвращает содержаниеwithBody($body)Устанавливает преобразованное содержаниеbody()Возвращает преобразованное содержаниеcookies(): HttpCookieCollectionInterfaceВозвращает cookiesheaders(): HeaderCollectionInterfaceВернуть заголовкиserver(): ServerCollectionInterfaceВозвращает значение SERVERoptions(): PathAccessInterfaceВозвращает опцииclientIp(): stringВозвращает IP адрес клиентаscriptName(): stringВозвращает запрошенный файл скриптаpath(): stringВозвращает путьbasePath(): stringПуть без файлаnormalizedBasePath(): stringПуть без файла с / на концеqueryString(): stringВозвращает строку запросаhost(): stringХостhttpHost(): stringХост и порт, если он не стандартныйschemeAndHttpHost(): stringСхема, хост и портisSecure(): boolИспользован httpsscheme(): stringВозвращает схему запросаport(): intВозвращает портuser(): stringВозвращает пользователяpassword(): ?stringВозвращает парольuserInfo(): stringВозвращает пользователя и парольpathAndQuery(): stringВозвращает путь и строку запросаuri(): stringВозвращает урл с хостом и строку запросаmethod(): stringВозвращает методisMethod(string $method): boolОпределяет методcontentType(): stringВозвращает тип содержанияisNoCache(): boolБез кешаisXmlHttpRequest(): boolВозвращает true если запрос XMLHttpRequesteTags(): arrayВозвращает ETagsscript(): stringВозвращает путь до выполняемого скриптаМетоды post(), query(), all(), only(array $keys), options() возвращают результат в виде объекта, реализующего `Fi1a\Collection\DataType\PathAccessInterface` из пакета [fi1a/collection](https://github.com/fi1a/collection)

### JSON-запрос

[](#json-запрос)

Если был передан заголовок `Content-Type: application/json` при запросе клиентом, то промежуточное ПО автоматически декодирует тело запроса из JSON-формата. Для того чтобы, получить доступ к декодированному значению вызовите метод `body()`:

```
request()->rawBody(); // {"foo":"bar"}
request()->body(); // ['foo' => 'bar']
```

### uri()

[](#uri)

Возвращает URL-адрес запроса

```
request()->uri(); // https://domain.ru/path/?foo=bar
```

### query()

[](#query)

Возвращает GET параметры запроса:

```
request()->query()->get('foo'); // bar
```

### post()

[](#post)

Возвращает POST параметры запроса:

```
request()->post()->get('foo'); // bar
```

### all()

[](#all)

Возвращает GET, POST, FILES, BODY параметры запроса:

```
request()->all()->get('foo'); // bar
```

### only()

[](#only)

Только переданные ключи из параметров GET и POST:

```
request()->only(['foo'])->get('foo'); // bar
```

### files()

[](#files)

Возвращает коллекцию `Fi1a\Http\UploadFileCollectionInterface` загруженных файлов `Fi1a\Http\UploadFileInterface`:

```
$collection = request()->files();
$uploadFile = $collection->get('some:file1');
$uploadFile->getName(); // file.txt
```

### cookies()

[](#cookies)

Возвращает коллекцию `Fi1a\Http\HttpCookieCollectionInterface` cookies `Fi1a\Http\HttpCookieInterface`:

```
$collection = request()->cookies();
$cookie = $collection->getByName('cookieName');
$cookie->getValue(); // cookieValue
```

### method()

[](#method)

Возвращает HTTP метод, с помощью которого был сделан запрос.

```
request()->method(); // POST
```

### headers()

[](#headers)

Возвращает все HTTP заголовки:

```
$headers = request()->headers();
$header = $headers->getLastHeader('X-Header');
$header->getValue(); // HeaderValue
```

HTTP-ответ
----------

[](#http-ответ)

HTTP-ответ представляет собой объект `Fi1a\Http\ResponseInterface`. Он содержит всю информацию, которая должна быть отправлена клиенту для текущего запроса. Конструктор принимает до трех аргументов: статус ответа, массив заголовков HTTP и объект запроса `Fi1a\Http\RequestInterface`. Для доступа к текущему ответу можно использовать хелпер `response()`.

```
use \Fi1a\Http\ResponseInterface;

$response = response()->withStatus(ResponseInterface::HTTP_INTERNAL_SERVER_ERROR);
response($response);
```

Установить новый текущий ответ:

```
use Fi1a\Http\Response;
use Fi1a\Http\ResponseInterface;

$response = new Response(ResponseInterface::HTTP_NOT_FOUND);
response($response);
```

Доступные методы `Fi1a\Http\ResponseInterface`:

МетодОписаниеwithStatus(int $status, ?string $reasonPhrase = null)Устанавливает код и текст ответаstatus(): intВозвращает код ответаreasonPhrase(): ?stringВозвращает текст ответаwithHeaders(HeaderCollectionInterface $headers)Устанавливает заголовкиheaders(): HeaderCollectionInterfaceВозвращает заголовкиwithHeader(string $name, string $value)Добавляет заголовок с определенным именем и значениемwithoutHeader(string $name)Удалить заголовки с определенным именемhasHeader(string $name): boolПроверяет наличие заголовкаcookies(): HttpCookieCollectionInterfaceВозвращает cookieswithCookies(HttpCookieCollectionInterface $cookies)Устанавливает cookieswithHttpVersion(string $version)Устанавливает версию HTTP протоколаhttpVersion(): stringВозвращает HTTP версию протоколаisEmpty(): boolЕсли true, то ответ пустойisInformational(): boolЕсли true, то ответ информационныйisSuccessful(): boolЕсли true, то ответ успешныйisClientError(): boolЕсли true, то клиентская ошибкаisServerError(): boolЕсли true, то серверная ошибкаisOk(): boolЕсли true, то ответ 200 OKisForbidden(): boolЕсли true, то 403 ForbiddenisNotFound(): boolЕсли true, то 404 Not foundisRedirection(?string $location = null): boolЕсли true, то перенаправлениеwithCharset(string $charset)Устанавливает кодировкуcharset(): stringВозвращает кодировкуwithDate(DateTime $date)Устанавливает датуdate(): DateTimeВозвращает датуlastModified(): ?DateTimeВозвращает время последнего измененияwithLastModified(?DateTime $date = null)Устанавливает время последнего изменения### withStatus(int $status, ?string $reasonPhrase = null)

[](#withstatusint-status-string-reasonphrase--null)

Устанавливает код ответа состояния. Рекомендуется использовать предопределенные константы `Fi1a\Http\ResponseInterface::HTTP_OK`, ... вместо реальных чисел.

```
use Fi1a\Http\ResponseInterface;

$response = response()->withStatus(ResponseInterface::HTTP_OK, 'OK');
response($response);
```

### withHeader(string $name, string $value)

[](#withheaderstring-name-string-value)

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

```
$response = response()->withHeader('X-Header', 'Value');
response($response);
```

### withoutHeader(string $name)

[](#withoutheaderstring-name)

Удалить заголовки с определенным именем:

```
$response = response()->withoutHeader('X-Header');
response($response);
```

### cookies

[](#cookies-1)

Возвращает cookies. Для того чтобы установить новую cookie, нужно добавить ее в коллекцию как в примере:

```
use Fi1a\Http\HttpCookie;

$cookie = new HttpCookie();
$cookie->setDomain('domain.ru');
$cookie->setName('CookieName');
$cookie->setPath('/');
$cookie->setValue('Value');

$response = response();
$response->cookies()->add($cookie);

buffer()->sendHeaders($response);
```

Cookie будет установлена при вызове метода `sendHeaders` класса `Fi1a\Http\OutputInterface`.

*В фреймворке Elpha, нет необходимости вызывать метод `sendHeaders` класса `Fi1a\Http\BufferOutputInterface`, фреймворк это сделает за вас.*

Отправка ответа
---------------

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

Отправка ответа клиенту осуществляется вызовом метода `send()` класса, реализующего интерфейс `Fi1a\Http\BufferOutputInterface`:

```
buffer()->send(response());
```

*В фреймворке Elpha, нет необходимости вызывать метод `send` класса `Fi1a\Http\BufferOutputInterface`, фреймворк это сделает за вас.*

Перенаправление
---------------

[](#перенаправление)

Перенаправление реализуется ответом с интерфейсом `Fi1a\Http\RedirectResponseInterface`. Можно воспользоваться хелперами:

```
use Fi1a\Http\ResponseInterface;

response(redirect()->to('/redirect/path', ResponseInterface::HTTP_MOVED_PERMANENTLY))
```

С помощью хелпера `redirect` мы создает ответ с перенаправлением по адресу '/redirect/path' и статусом ResponseInterface::HTTP\_MOVED\_PERMANENTLY и устанавливаем его используя `response`.

JSON-ответ
----------

[](#json-ответ)

JSON-ответ реализуется интерфейсом `Fi1a\Http\JsonResponseInterface`. Можно воспользоваться хелперами:

```
response(json()->data(['foo' => 'bar']));
```

С помощью хелпера `json` мы создает JSON-ответ и устанавливаем его используя `response`. После установки JSON-ответа, промежуточное ПО устанавливает необходимые заголовки и выводит результат.

Сессия
------

[](#сессия)

Если у вас есть сессия, вы можете получить к ней доступ через хелпер `session()`. Сессия имеет интерфейс `Fi1a\Http\SessionStorageInterface`. Перед тем как получать или устанавливать значения в сессию, ее нужно открыть с помощью метода `open()`.

*В фреймворке Elpha, нет необходимости открывать сессию, фреймворк это сделает за вас.*

```
$session = session();
if (!$session->isOpen()) {
    $session->open();
}

$session->getValues()->set('foo:bar', 'baz');
$session->getValues()->get('foo:bar'); // baz

$session->close();
```

Flush
-----

[](#flush)

Сохраняет значение в сессии. После получения значения, стирает его.

```
use Fi1a\Http\Flush;

if (!session()->isOpen()) {
    session()->open();
}

$flush = new Flush();

$flush->set('foo', 'bar');

$flush->get('foo'); // bar
$flush->get('foo'); // null
```

Uri
---

[](#uri-1)

Класс реализующий интрефейс `Fi1a\Http\UriInterface` упрощает работу с URI и с его отдельными компонентами:

```
https://user:password@domain.ru:8080/url/path/?foo=bar#fragment
|----| |---| |------| |-------| |---||-------| |-----| |------|
  |      |      |        |        |     |         |        |
scheme  user password   host     port  path     query   fragment

```

Генерация Uri:

```
use Fi1a\Http\Uri;

$uri = new Uri();

$uri = $uri->withScheme('https')
    ->withHost('domain.ru')
    ->withPath('/path/')
    ->withQueryParams([
        'foo' => 'bar',
    ]);

$uri->uri(); // "https://domain.ru/path/?foo=bar"
```

Вы также можете задать URL-адрес строкой, а затем использовать его компоненты:

```
use Fi1a\Http\Uri;

$uri = new Uri('https://domain.ru/path/?foo=bar');

$uri->host(); // "domain.ru"
$uri->path(); // "/path/"
```

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

МетодОписаниеscheme(): stringСхемаwithScheme(string $scheme)Задать схемуisSecure(): boolИспользован httpsuserInfo(): 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)Установить часть пути URIbasePath(): stringУрл без файлаnormalizedBasePath(): stringУрл без файла с / на концеquery(): stringСтрока запроса в URIwithQuery(string $query)Задать строку запроса URIqueryParams(): PathAccessInterfaceМассив запроса в URIwithQueryParams($queryParams)Задать массив запроса в URIfragment(): stringФрагмент URIwithFragment(string $fragment)Задать фрагмент URIurl(): stringВозвращает URLuri(): stringВозвращает URIpathAndQuery(): stringВозвращает путь и строку запросаauthority(): stringКомпонент полномочий URImaskedUri(): stringВозвращает URI с маской на данных авторизацииreplace(string $uri = '', array $variables = \[\])Заменить адрес переданным значениемisRelative(): boolОтносительный uri или нет

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity16

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

cookieheadershttpphprequestresponsesession

### Embed Badge

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

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

###  Alternatives

[friendsofsymfony/rest-bundle

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

2.8k73.3M319](/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.8M293](/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)
