# PHP пакет для управления HTTP-запросами

Пакет HttpSoft\Request реализует Psr\Http\Message\RequestInterface и Psr\Http\Message\ServerRequestInterface в соответствии со спецификациями RFC 7230 и RFC 7231.

Данная библиотека предоставляет функционал HTTP-запросов для взаимодействия с HTTP-клиентом и серверным приложением.

Для этого пакета требуется PHP версии 7.4 или более поздней.

Установка пакета:

composer require httpsoft/http-request

Исходный код на GitHub

# API

# Использование с HTTP-клиентом

Данная библиотека не включает клиентскую реализацию. Для взаимодействия с HTTP-клиентом, нужно создать и заполнить экземпляр Psr\Http\Message\RequestInterface, а клиент должен вернуть экземпляр Psr\Http\Message\ResponseInterface.

use HttpSoft\Request\Request;
use HttpSoft\Request\RequestFactory;
use HttpSoft\Uri\UriFactory;

$method = 'POST';
$uri = 'http://example.com/auth';
$body = 'php://temp';
$headers = [
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer ...',
];
$protocol = '1.1';

$request = new Request($method, $uri, $body, $headers, $protocol);
// эквивалентно:
$request = RequestFactory::create($method, $uri, $body, $headers, $protocol);

// Используя сеттеров:
$request = (new Request())
    ->withMethod($method)
    ->withUri(UriFactory::create($uri))
    ->withAddedHeader('Content-Type', 'application/json')
    ->withAddedHeader('Authorization', 'Bearer ...');

# Установка цели запроса:
$uri = UriFactory::create('http://example.com');
// absolute-form
$request = $request->withRequestTarget((string) $uri);
// authority-form
$request = $request->withRequestTarget($uri->getAuthority());
// asterisk-form
$request = $request->withRequestTarget('*');

# Абстрактный пример отправки запроса HTTP-клиенту:
$request->getBody()->write(json_encode($data));
$response = $client->send($request);

Подробное описание использования HttpSoft\Request\Request смотрите здесь.

# Использование с серверным приложением

Для взаимодействия с серверным приложением, нужно создать и заполнить экземпляр Psr\Http\Message\ServerRequestInterface, а в ответ должен вернуться экземпляр Psr\Http\Message\ResponseInterface.

Для создания экземпляра HttpSoft\Request\ServerRequest необходимо указать множество данных о входящем запросе, которые хранятся в суперглобальных массивах.

use HttpSoft\Request\ServerRequest;

$request = new ServerRequest(
    $_SERVER,
    $_FILES,
    $_COOKIE,
    $_GET,
    $_POST,
    'GET', // Метод запроса
    'http://example.com', // URI запроса
    'php://input', // Тело HTTP-сообщения
    ['Host' => 'example.com', /* Другие заголовки */],
    '1.1' // Версия HTTP-протокола
);

Чтобы не формировать все данные вручную, можно воспользоваться фабрикой HttpSoft\Request\ServerRequestFactory.

use HttpSoft\Request\ServerRequestFactory;

$request = ServerRequestFactory::createFromGlobals($_SERVER, $_FILES, $_COOKIE, $_GET, $_POST);
// эквивалентно:
$request = ServerRequestFactory::createFromGlobals();
// эквивалентно:
$request = ServerRequestFactory::create();

Подробное описание использования HttpSoft\Request\ServerRequest смотрите здесь.

Подробное описание использования HttpSoft\Request\ServerRequestFactory смотрите здесь.