Легенда

Интернет стоит на серверах, а они в свою очередь держатся на умелых руках администраторов и разработчиков. Вам предстоит решить задачу обоих специалистов, создав и запустив сервер для хранения произвольных текстовых данных (key-value хранилище, по сути, dict с доступом по HTTP), по следующему протоколу (сервер должен быть доступен по любому адресу через порт 2020):

Запрос Ответ
GET /{key} код 200 с содержимым соответствующей ячейки в теле ответа
если ключ отсутствует, код 404
POST /{key}
тело с текстом

код 202 с содержимым в формате «[key] => [value]» (например, «1 => potato») и записать текст в соответствующую ячейку по ключу

DELETE /{key}

код 204 с пустым телом и заголовком «X-Value», в котором находится удалённое содержимое (т.е. соответствующая ячейка удаляется)
если ключ отсутствует, код 404

GIVE /
заголовок "Gift"

код 255 с сообщением «Gift Accepted»
текстовое тело: «Thanks for your [gift]!», где [gift] — содержимое заголовка "Gift"

Эта задача выполняется на виртуальной машине Ubuntu 18.04. ВМ предоставлена внешним сервисом, интегрированным в Степик, и доступ к ней осуществляется через удалённый текстовый терминал. Нажатие на кнопку «Начать решение» или «Попробовать снова» запустит таймер на 60 минут, в течение которых вам будет доступен сеанс ВМ, терминал для которого можно открыть нажатием на «Open Terminal».

Вам необходимо программно реализовать HTTP-сервер внутри ВМ, используя исключительно доступные по умолчанию инструменты (apt не настроен, мы проверяли). Мы рекомендуем использовать Python 3, в его стандартную библиотеку уже включен модуль для создания веб-сервера. Но если вам удастся решить задачу на другом языке, об этом никто не узнает.

Чтобы задача была зачтена, вам необходимо запустить реализованный сервер и, оставив его работать (можно не закрывать терминал), нажать «Отправить». Проверочная система выполнит ряд HTTP-запросов по адресу виртуальной машины, чтобы проверить функциональность сервера. Если все ответы на запрос будут соответствовать ожидаемым, вы получите полный балл. Если один из ответов проваливает проверку, вы теряете попытку, при этом ВМ и сервер продолжают работать. Но напомним, что сеанс ВМ доступен лишь в течение часа, после чего ВМ будет уничтожена.

Главная проблема здесь — передача написанного снаружи кода программы внутрь ВМ. Обычная вставка текста в консоль у нас не сработала (хотя в Chromium можно сделать вставку через контекстное меню), но есть как минимум два известных способа решить проблему. Второй — использовать scp или curl, чтобы передать текст с другого сервера. Самый простой вариант — использовать pastebin.com. Загрузив на него текст программы, можно скачать его в файл внутри ВМ с помощью команды curl https://pastebin.com/raw/ABCDEFG > server.py. Вместо ABCDEFG будет идентификатор вашей «пасты». Будьте внимательны, выставляя настройки видимости. ;)

Видео-разбор


Последнее изменение: Tuesday, 15 June 2021, 09:44