httpserver - HTTP-сервер

Функції для запуску вбудованого HTTP-сервера на Лілці.

Модуль httpserver дозволяє приймати HTTP-запити від інших пристроїв у мережі, обробляти їх та надсилати відповіді. Для роботи сервера Лілка повинна бути підключена до WiFi (див. wifi - Робота з WiFi-мережами).

Приклад простого HTTP-сервера, який відповідає на запити:

 1wifi.connect("MyWifi", "password")
 2
 3local server_fd = httpserver.listen(80)
 4
 5function lilka.update(delta)
 6    local req, err = httpserver.accept(server_fd, 0)
 7    if req == nil then
 8        return
 9    end
10
11    if req.path == "/" then
12        httpserver.respond(req.fd, 200, {["Content-Type"] = "text/plain"}, "Привіт від Лілки!")
13    else
14        httpserver.respond(req.fd, 404, {}, "Not Found")
15    end
16end
17
18function lilka.draw()
19    display.fill_screen(display.color565(0, 0, 0))
20    display.set_cursor(0, 16)
21    display.print("HTTP-сервер запущено")
22end
class httpserver
static listen(port, backlog?)

Creates a TCP server socket and starts listening for HTTP connections.

Parameters:
  • port (integer) – Port to listen on (e.g. 80)

  • backlog? (integer) – Connection backlog (default: 5)

Returns:

fd Server socket file descriptor, or nil on error

Return type:

integer or nil

Returns:

? errmsg Error message on failure

Return type:

str

static accept(server_fd, timeout_ms?)

Waits for and accepts the next HTTP connection, parses the request.

The returned fd must be passed to httpserver.respond() or net.close().

Parameters:
  • server_fd (integer) – Server socket from httpserver.listen()

  • timeout_ms? (integer) – How long to wait in ms; -1 = block indefinitely

Returns:

request Parsed request table, or nil on timeout/error

Return type:

HttpRequest or nil

Returns:

? errmsg «timeout» | error description

Return type:

str

static respond(fd, status, headers?, body?)

Sends a complete HTTP/1.1 response and closes the client connection.

Parameters:
  • fd (integer) – Client socket fd from request.fd

  • status (integer) – HTTP status code (e.g. 200, 404)

  • headers? (dict[str, str]) – Extra response headers

  • body? (str) – Response body (default: empty)

static close(fd)

Closes a server socket (stops accepting new connections).

Parameters:

fd (integer) – Server socket file descriptor

class HttpRequest
fd: integer

Client socket fd — pass to httpserver.respond() or net.close()

client_ip: str

Remote client IP address

method: str

HTTP method (GET, POST, PUT, DELETE, …)

path: str

URL path without query string

query: str

Raw query string (may be empty)

headers: dict[str, str]

Request headers (keys lowercased)

body: str

Request body (empty string when none)