03 - PSR-7 HTTP Запрос
Обзор
Phalcon\Http\Message\Request -Запрос является реализацией интерфейса обмена сообщениями PSR-7 HTTP как это определено PHP-FIG.
Эта реализация была создана для установления стандарта между реализациями промежуточного программного обеспечения. Приложениям часто нужно отправлять запросы на внешние конечные точки. Для этого вы можете использовать объект Phalcon\Http\Message\Request. В ответ наше приложение получит ответный объект.
ПРИМЕЧАНИЕ Phalcon не ограничивает вас в использовании определенного HTTP-клиента. Любой клиент, совместимый с PSR-7, будет работать с этим компонентом, чтобы вы могли выполнять ваши запросы.
ПРИМЕЧАНИЕ: В приведенных ниже примерах
$httpClient
- это клиент по вашему выбору, который реализует PSR-7.
<?php use Phalcon\Http\Message\Request; use Phalcon\Http\Message\Uri; $request = new Request(); $uri = new Uri('https://api.phalcon.io/companies/1'); $jwtToken = 'abc.def.ghi'; $request = $request ->withMethod('POST') ->withHeader('Authorization', 'Bearer ' . $jwtToken) ->withHeader('Content-Type', 'application/json') ; $result = $httpClient->send($request);
Мы создаем новый объект Phalcon\Http\Message\Request и новый объект Phalcon\Http\Message\Uri с целевым URL. После этого мы определяем метод (POST
) и дополнительные заголовки, которые нам нужно отправить с нашим запросом. Затем клиент отправляет запрос, используя объект запроса.
Приведенный выше пример может быть реализован только с использованием параметров конструктора:
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); $result = $httpClient->send($request);
Созданный объект Phalcon\Http\Message\Request является неизменным, то есть он никогда не изменится. Любой вызов методов с префиксом with*
вернет клон объекта для сохранения неизменности в соответствии со стандартом.
Конструктор
public function __construct( [string $method = "GET" [, mixed $uri = null [, mixed $body = "php://temp" [, array $headers = [] ]]]] )
Конструктор принимает параметры, позволяющие создать объект с определенными заполненными свойствами. Вы можете определить целевой метод HTTP, URL, тело, а также заголовки. Все параметры являются необязательными.
method
- по умолчаниюGET
. Поддерживаемые методы:GET
,CONNECT
,DELETE
,HEAD
,OPTIONS
,PATCH
,POST
,PUT
,TRACE
uri
- экземпляр Phalcon\Http\Message\Uri или URL.body
- по умолчаниюphp://memory
. Метод принимает либо объект, который реализует интерфейсStreamInterface
, либо строку, такую как имя потока. Режим по умолчанию для потока -w+b
. Если пропущен недопустимый поток, генерируется исключение InvalidArgumentExceptionheaders
- Массив значений ключа, с ключом в качестве имени заголовка и значением в качестве значения заголовка.
Геттеры
getBody()
Возвращает тело как объект StreamInterface
<?php use Phalcon\Http\Message\Request; use Phalcon\Http\Message\Stream; $jwtToken = 'abc.def.ghi'; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', $stream, [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); echo $request->getBody(); // '/assets/stream/mit.txt'
getHeader()
Возвращает массив всех значений заголовка переданного без учета регистра имени заголовка. Если строковый параметр, представляющий запрашиваемое имя заголовка, отсутствует, возвращается пустой массив.
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); echo $request->getHeader('content-Type'); // ['application/json'] echo $request->getHeader('unknown'); // []
getHeaderLine()
Возвращает все значения заголовка данного имени заголовка без учета регистра в виде строки, объединенной вместе с помощью запятой. Если строковый параметр, представляющий запрашиваемое имя заголовка, возвращается пустая строка.
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => [ 'application/json', 'application/html', ], ] ); echo $request->getHeaderLine('content-Type'); // 'application/json,application/html'
getHeaders()
Возвращает массив со всеми значениями заголовка сообщения. Ключи представляют имя заголовка, так как оно будет отправлено по проводам, а каждое значение представляет собой массив строк, связанных с заголовком. Хотя имена заголовков не чувствительны к регистру, этот метод сохраняет точный регистр, в котором заголовки были изначально указаны.
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => [ 'application/json', 'application/html', ], ] ); var_dump( $request->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/json', // 'application/html', // ], // ]
getMethod()
Возвращает метод в виде строки
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); echo $request->getMethod(); // POST
getProtocolVersion()
Возвращает версию протокола в виде строки (по умолчанию 1.1
)
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); echo $request->getProtocolVersion(); // '1.1'
getRequestTarget()
Возвращает строку, представляющую цель запроса сообщения, либо в том виде, в каком оно будет отображаться (для клиентов), в том виде, в котором оно появилось в запросе (для серверов), или в том виде, в котором оно было указано для экземпляра (см. withRequestTarget()
). В большинстве случаев это будет исходная форма составленного URI, если только значение не было предоставлено конкретной реализации (см. withRequestTarget()
).
<?php use Phalcon\Http\Message\Request; $request = new Request(); $request = $request->withRequestTarget('/test'); echo $request->getRequestTarget(); // '/test'
getUri()
Возвращает Uri как объект UriInterface
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); echo $request->getUri(); // UriInterface : https://api.phalcon.io/companies/1
Существование
hasHeader()
Проверяет, существует ли заголовок с заданным нечувствительным к регистру именем. Возвращает true
, если заголовок был найден, false
в противном случае
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => [ 'application/json', 'application/html', ], ] ); echo $request->hasHeader('content-type'); // true
С
Объект запроса является неизменяемым. Однако существует ряд методов, позволяющих вводить в него данные. Возвращаемый объект является клоном исходного объекта.
withAddedHeader()
Возвращает экземпляр с дополнительным заголовком, добавленным к заданному значению. Существующие значения для указанного заголовка будут сохранены. Новое значение(ы) будет добавлено к существующему списку. Если заголовок ранее не существовал, он будет добавлен. Создает исключение InvalidArgumentException для недопустимых имен заголовков или значений. Значения заголовка могут быть строкой или массивом строк.
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => [ 'application/json', ], ] ); var_dump( $request->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/json', // ], // ] $clone = $request ->withAddedHeader( 'Content-Type', [ 'application/html' ] ); var_dump( $clone->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/json', // 'application/html', // ], // ]
withBody()
Возвращает экземпляр с указанным телом сообщения, который реализует StreamInterface
. Создает исключение InvalidArgumentException, когда тело недопустимо.
<?php use Phalcon\Http\Message\Request; use Phalcon\Http\Message\Stream; $jwtToken = 'abc.def.ghi'; $fileName = dataFolder('/assets/stream/mit.txt'); $stream = new Stream($fileName, 'rb'); $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); $clone = $request->withBody($stream); echo $clone->getBody(); // '/assets/stream/mit.txt'
withHeader()
Возвращает экземпляр с предоставленным значением, заменяющим указанный заголовок. В то время как имена заголовков не чувствительны к регистру, оболочка заголовка будет сохранена этой функцией и возвращена из getHeaders()
. Создает исключение InvalidArgumentException для недопустимых имен заголовков или значений.
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, ] ); var_dump( $request->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // ] $clone = $request->withAddedHeader( 'Content-Type', [ 'application/html', ] ); var_dump( $clone->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/html', // ], // ]
withMethod()
Возвращает экземпляр с предоставленным методом HTTP в виде строки. Создает исключение InvalidArgumentException для недопустимых методов HTTP.
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => 'application/json', ] ); echo $request->getMethod(); // POST $clone = $request->withMethod('GET'); echo $clone->getMethod(); // GET
withProtocolVersion()
Возвращает экземпляр с указанной версией протокола HTTP (в виде строки).
<?php use Phalcon\Http\Message\Request; $request = new Request(); echo $request->getProtocolVersion(); // '1.1' $clone = $request->withProtocolVersion('2.0'); echo $clone->getProtocolVersion(); // '2.0'
withRequestTarget()
Возвращает экземпляр с определенным целевым запросом.
<?php use Phalcon\Http\Message\Request; $request = new Request(); echo $request->getRequestTarget(); // "/" $clone = $request->withRequestTarget('/test'); echo $clone->getRequestTarget(); // '/test'
withUri()
Возвращает экземпляр с предоставленным URI UriInterface
. Этот метод обновляет заголовок Host
возвращенного запроса по умолчанию, если URI содержит компонент host. Если URI не содержит компонент хоста, любой ранее существующий заголовок хоста будет перенесен в возвращенный запрос.
Вы можете отказаться от сохранения исходного состояния заголовка Host, установив для $preserveHost
значение true
. Когда $preserveHost
имеет значение true
, этот метод взаимодействует с заголовком Host следующими способами:
- Если заголовок узла отсутствует или пуст, а новый URI содержит компонент узла, этот метод обновит заголовок узла в возвращенном запросе.
- Если заголовок Host отсутствует или пуст, а новый URI не содержит компонент
Host
, этот метод не будет обновлять заголовок Host в возвращенном запросе. - Если заголовок Host присутствует и не пуст, этот метод не будет обновлять заголовок
Host
в возвращенном запросе.
<?php use Phalcon\Http\Message\Request; $query = 'https://phalcon.io'; $uri = new Uri($query); $request = new Request(); $clone = $request->withUri($uri); echo $clone->getRequestTarget(); // 'https://phalcon.io'
withoutHeader()
Вернуть экземпляр без указанного заголовка.
<?php use Phalcon\Http\Message\Request; $jwtToken = 'abc.def.ghi'; $request = new Request( 'POST', 'https://api.phalcon.io/companies/1', 'php://memory', [ 'Authorization' => 'Bearer ' . $jwtToken, 'Content-Type' => [ 'application/json', ], ] ); var_dump( $request->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // 'Content-Type' => [ // 'application/json', // ], // ] $clone = $request->withoutHeader('Content-Type'); var_dump( $clone->getHeaders() ); // [ // 'Authorization' => 'Bearer abc.def.ghi', // ]