Проектная лаборатория
Собственный HTTP-сервер
Этап 08 · Основные этапы
Чтение тела запроса
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поддержку метода POST для эндпоинта /files/{filename}, который принимает текст от клиента и создаёт новый файл с этим текстом.
Тело запроса
Тело запроса используется для передачи данных от клиента серверу.
Пример запроса POST /files/{filename}:
// Request line
POST /files/number HTTP/1.1
\r\n
// Headers
Host: localhost:4221\r\n
User-Agent: curl/7.64.1\r\n
Accept: */*\r\n
Content-Type: application/octet-stream // Header that specifies the format of the request body
Content-Length: 5\r\n // Header that specifies the size of the request body, in bytes
\r\n
// Request Body
12345Тесты
Тестирующая система запустит программу с флагом --directory. Флаг --directory задаёт абсолютный путь к каталогу, в котором нужно создать файл.
$ ./your_program.sh --directory /tmp/Затем она отправит запрос POST к эндпоинту /files/{filename} вашего сервера, содержащий:
- Заголовок
Content-Typeсо значениемapplication/octet-stream. - Заголовок
Content-Lengthс размером тела запроса в байтах. - Тело запроса с произвольным текстом.
$ curl -v --data "12345" -H "Content-Type: application/octet-stream" http://localhost:4221/files/file_123Сервер должен вернуть ответ 201:
HTTP/1.1 201 Created\r\n\r\nТакже сервер должен создать новый файл в каталоге файлов со следующими требованиями:
- Имя файла должно совпадать с параметром
filenameэндпоинта. - Файл должен содержать содержимое тела запроса.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init http-server ./my-http-server --language go2. Откройте папку в IDE
cd ./my-http-serverРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage qv8Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.