Curso de Raku / Programación funcional, concurrente, reactiva y web / Programación web / Un servidor HTTP sencillo / Exercises / La ruta en mayúsculas

Solución: La ruta en mayúsculas

Aquí tienes una posible solución para la tarea.

Código

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" — the path is the second word; drop the leading '/'
    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;
}

🦋 Puedes encontrar el código fuente en el archivo text-response.raku.

Salida

HELLO

Comentarios

  1. .recv lee la petición. Su primera línea es GET /hello HTTP/1.0; .words[1] extrae /hello, y .substr(1) quita la barra inicial para dejar hello.

  2. .uc lo pasa a mayúsculas, y eso se convierte en el cuerpo de la respuesta. La respuesta depende ahora de lo que pidió el cliente: el servidor está procesando la petición, no devolviendo una cadena fija.

  3. El bloque entero de aceptar, leer y responder está dentro de un loop, así que el servidor responde una petición tras otra en lugar de detenerse tras la primera. Detenlo con Ctrl-C.

La ruta en mayúsculas   |   Cro 101