# 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 # API
- HttpSoft\Request\Request — класс, реализующий Psr\Http\Message\RequestInterface.
- HttpSoft\Request\RequestFactory — фабрика для создания HttpSoft\Request\Request, реализует Psr\Http\Message\RequestFactoryInterface.
- HttpSoft\Request\RequestTrait — трейт, реализующий методы, определенные в Psr\Http\Message\RequestInterface, используется внутри HttpSoft\Request\Request и HttpSoft\Response\ServerRequest.
- HttpSoft\Request\SapiNormalizer — класс, нормализует необходимые данные для создания HttpSoft\Request\ServerRequest из параметров сервера, реализует HttpSoft\Request\ServerNormalizerInterface.
- HttpSoft\Request\ServerRequest — класс, реализующий Psr\Http\Message\ServerRequestInterface.
- HttpSoft\Request\ServerRequestFactory — фабрика для создания HttpSoft\Request\ServerRequest, реализует Psr\Http\Message\ServerRequestFactoryInterface.
# Использование с 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 смотрите здесь.
