К содержанию
Meduza
Документация

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