Курс языка программирования Raku / Функциональное, конкурентное, реактивное и веб-программирование / Веб-программирование / Простой HTTP-сервер / Exercises / Путь в верхнем регистре

Решение: Путь в верхнем регистре

Вот один из возможных вариантов решения задачи.

Код

my $listener = IO::Socket::INET.new(
    :listen,
    :localhost('127.0.0.1'),
    :localport(8080),
);

loop {
    my $conn = $listener.accept;
    my $request = $conn.recv;

    # "GET /hello HTTP/1.0" — путь это второе слово; отбрасываем ведущий '/'
    my $reply = $request.lines.first.words[1].substr(1).uc;

    $conn.print("HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\n\r\n$reply\n");
    $conn.close;
}

🦋 Исходный код можно найти в файле text-response.raku.

Вывод

HELLO

Комментарии

  1. .recv читает запрос. Его первая строка — GET /hello HTTP/1.0; .words[1] выбирает /hello, а .substr(1) отбрасывает ведущую косую черту, оставляя hello.

  2. .uc переводит это в верхний регистр, и результат становится телом ответа. Ответ теперь зависит от того, что запросил клиент: сервер обрабатывает запрос, а не возвращает фиксированную строку.

  3. Весь блок «принять — прочитать — ответить» находится внутри loop, поэтому сервер отвечает на запрос за запросом, а не останавливается после первого. Остановите его по Ctrl-C.

Навигация по курсу

Путь в верхнем регистре   |   Основы Cro