local socket = require("socket") local host = "localhost" local port = 8080 local server = assert(socket.bind(host, port)) print("Server started on http://" .. host .. ":" .. port .. "/hello?name=YourName") -- Helper function to extract query parameters local function get_query_param(url, key) local pattern = key .. "=([^&]+)" return url:match(pattern) end while true do local client = server:accept() client:settimeout(10) local line, err = client:receive() if not err then -- Extract method and URI (e.g., "GET /hello?name=Raycast HTTP/1.1") local method, uri = line:match("^(%a+)%s+(%S+)%s+HTTP") local response_body = "" local status = "404 Not Found" -- Basic Routing: Check if path starts with /hello if uri and uri:find("^/hello") then status = "200 OK" -- Extract 'name' param or default to 'User' local name = get_query_param(uri, "name") or "User" -- URL decoding for spaces (%20) name = name:gsub("%%20", " ") response_body = "Hello " .. name .. "!" else response_body = "Not Found" end local response = "HTTP/1.1 " .. status .. "\r\n" .. "Content-Type: text/plain\r\n" .. "Content-Length: " .. #response_body .. "\r\n" .. "Connection: close\r\n\r\n" .. response_body client:send(response) end client:close() end