HTTP-запросы
App\Http\Request используется для чтения данных входящего HTTP-запроса.
Инициализация класса
Создайте объект Request, после чего сможете получать заголовки, метод и параметры текущего запроса.
use App\Http\Request;
$request = new Request();
Получение заголовков запроса
Метод $request->getHeaders() возвращает все заголовки запроса.
Запрос:
GET / HTTP/1.1
Host: localhost:8001
Код/Результат:
$headers = $request->getHeaders();
echo print_r($headers, true);
Array
(
[User-Agent] => PostmanRuntime/7.37.3
[Accept] => */*
[Postman-Token] => 5ef52a6e-74cb-4717-a4cc-ac244118a90d
[Host] => localhost:8001
[Accept-Encoding] => gzip, deflate, br
[Connection] => keep-alive
)
Метод $request->getHeaders($key) возвращает конкретный заголовок.
Запрос:
GET / HTTP/1.1
Host: localhost:8001
Код/Результат:
$userAgent = $request->getHeaders('User-Agent');
echo $userAgent;
PostmanRuntime/7.37.3
Получение метода запроса
Метод $request->getMethod() возвращает HTTP-метод текущего запроса.
Запрос:
POST / HTTP/1.1
Host: localhost:8001
Код/Результат:
$method = $request->getMethod();
echo $method;
POST
Получение параметров запроса
-
Получение GET-параметров:
-
Запрос:
GET /?limit=1&offset=0 HTTP/1.1 Host: localhost:8001 -
Код/Результат:
$limit = $request->get('limit', Request::GET); $offset = $request->get('offset', Request::GET); echo sprintf("limit %d\noffset %d", $limit, $offset);limit 1 offset 0
-
-
Получение POST multipart/form-data:
-
Запрос:
POST / HTTP/1.1 Host: localhost:8001 Content-Length: 250 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW ------WebKitFormBoundary7MA4YWxkTrZu0gW ------WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="file"; filename="photo.png" Content-Type: image/png (data) ------WebKitFormBoundary7MA4YWxkTrZu0gW-- -
Код/Результат:
$name = $request->get('name', Request::POST); $uploadedFile = $request->get('file', Request::FILE); echo sprintf("name %s\nfile %s", $name, $uploadedFile[0]['tmp_name']);name photo-1 file /tmp/phpho5g748g59g0epQZc4S
-
-
Получение POST-параметров x-www-form-urlencoded:
-
Запрос:
POST / HTTP/1.1 Host: localhost:8001 Content-Type: application/x-www-form-urlencoded Content-Length: 20 name=App&email=app%40mail.ru -
Код/Результат:
$name = $request->get('name', Request::POST); $email = $request->get('email', Request::POST); echo sprintf("name %s\nemail %s", $name, $email);name App email app@mail.ru
-
-
Получение JSON-данных POST-запроса:
-
Запрос:
POST / HTTP/1.1 Host: localhost:8001 Content-Type: application/json Content-Length: 65{ "data": { "name": "App", "email": "app@mail.ru" } } -
Код/Результат:
$payload = $request->get('data', Request::POST); echo json_encode($payload);{"name":"App","email":"app@mail.ru"}
-
-
Получение PUT-параметров x-www-form-urlencoded:
-
Запрос:
PUT / HTTP/1.1 Host: localhost:8001 Content-Type: application/x-www-form-urlencoded Content-Length: 20 name=App&email=app%40mail.ru -
Код/Результат:
$name = $request->get('name', Request::PUT); $email = $request->get('email', Request::PUT); echo sprintf("name %s\nemail %s", $name, $email);name App email app@mail.ru
-
-
Получение JSON-данных PUT-запроса:
-
Запрос:
PUT / HTTP/1.1 Host: localhost:8001 Content-Type: application/json Content-Length: 65{ "data": { "name": "App", "email": "app@mail.ru" } } -
Код/Результат:
$payload = $request->get('data', Request::PUT); echo json_encode($payload);{"name":"App","email":"app@mail.ru"}
-
-
Получение PATCH-параметров x-www-form-urlencoded:
-
Запрос:
PATCH / HTTP/1.1 Host: localhost:8001 Content-Type: application/x-www-form-urlencoded Content-Length: 20 name=App&email=app%40mail.ru -
Код/Результат:
$name = $request->get('name', Request::PATCH); $email = $request->get('email', Request::PATCH); echo sprintf("name %s\nemail %s", $name, $email);name App email app@mail.ru
-
-
Получение JSON-данных PATCH-запроса:
-
Запрос:
PATCH / HTTP/1.1 Host: localhost:8001 Content-Type: application/json Content-Length: 65{ "data": { "name": "App", "email": "app@mail.ru" } } -
Код/Результат:
$payload = $request->get('data', Request::PATCH); echo json_encode($payload);{"name":"App","email":"app@mail.ru"}
-
-
Получение DELETE-параметров x-www-form-urlencoded:
-
Запрос:
DELETE / HTTP/1.1 Host: localhost:8001 Content-Type: application/x-www-form-urlencoded Content-Length: 20 name=App&email=app%40mail.ru -
Код/Результат:
$name = $request->get('name', Request::DELETE); $email = $request->get('email', Request::DELETE); echo sprintf("name %s\nemail %s", $name, $email);name App email app@mail.ru
-
-
Получение JSON-данных DELETE-запроса:
-
Запрос:
DELETE / HTTP/1.1 Host: localhost:8001 Content-Type: application/json Content-Length: 65{ "data": { "name": "App", "email": "app@mail.ru" } } -
Код/Результат:
$payload = $request->get('data', Request::DELETE); echo json_encode($payload);{"name":"App","email":"app@mail.ru"}
-
-
Получение binary-данных для POST/PUT/PATCH с заголовком
Content-Type: application/octet-stream:-
Запросы с данными:
POST / HTTP/1.1 Host: localhost:8001 Content-Type: application/octet-stream Content-Length: 25 тестовая текстовая строкаPUT / HTTP/1.1 Host: localhost:8001 Content-Type: application/octet-stream Content-Length: 25 тестовая текстовая строкаPATCH / HTTP/1.1 Host: localhost:8001 Content-Type: application/octet-stream Content-Length: 25 тестовая текстовая строка -
Код/Результат:
$binaryContent = $request->get('binary', Request::FILE); echo $binaryContent;тестовая текстовая строка
-
Запросы с файлом:
POST / HTTP/1.1 Host: localhost:8002 Content-Type: application/octet-stream Content-Length: 20 "<file contents here>"PUT / HTTP/1.1 Host: localhost:8002 Content-Type: application/octet-stream Content-Length: 20 "<file contents here>"PATCH / HTTP/1.1 Host: localhost:8002 Content-Type: application/octet-stream Content-Length: 20 "<file contents here>" -
Код/Результат:
$binaryFile = $request->get('binary', Request::FILE); echo $binaryFile;(binary)
-
Установка параметров запроса
Метод $request->set($key, $value, $method) позволяет программно записать значение в нужный набор
данных запроса.
Код/Результат:
$request->set('index', 1, Request::GET);
$request->set('index', 2, Request::POST);
$request->set('index', 3, Request::PUT);
$request->set('index', 4, Request::PATCH);
$request->set('index', 5, Request::DELETE);
$request->set('index', 6, Request::FILE);
$getIndex = $request->get('index', Request::GET);
$postIndex = $request->get('index', Request::POST);
$putIndex = $request->get('index', Request::PUT);
$patchIndex = $request->get('index', Request::PATCH);
$deleteIndex = $request->get('index', Request::DELETE);
$fileIndex = $request->get('index', Request::FILE);
echo sprintf(
"getIndex %d\npostIndex %d\nputIndex %d\npatchIndex %d\ndeleteIndex %d\nfileIndex %d",
$getIndex, $postIndex, $putIndex, $patchIndex, $deleteIndex, $fileIndex
);
getIndex 1
postIndex 2
putIndex 3
patchIndex 4
deleteIndex 5
fileIndex 6