@eryx/http Module
JSON
HTTP/1.1 client and server library.
Built on top of @eryx/_socket and @eryx/_ssl, this module provides
both one-shot convenience functions and lower-level connection and
server classes for HTTP and HTTPS, with cookie jars, pooled sessions,
streaming request and response bodies, multipart/form helpers, and
HTTP/1.1 trailer support.
Client - one-shot request:
local http = require("@eryx/http")
local response = http.get("http://example.com/")
print(response.status, response.reason)
print(response.body)
Client - persistent connection:
local conn = http.HttpConnection.new("example.com", 80)
conn:request("GET", "/")
local resp = conn:getResponse()
conn:close()
Cookies:
local jar = http.CookieJar.new()
http.get("http://example.com/login", { cookies = jar })
-- jar stores Set-Cookie headers; subsequent requests send them back
http.get("http://example.com/dashboard", { cookies = jar })
Multipart form upload:
local body, contentType = http.multipart({
{ name = "field", value = "text" },
{ name = "file", value = data, filename = "pic.png" },
})
http.post("http://example.com/upload", body, {
headers = { ["Content-Type"] = contentType },
})
Session with connection reuse:
local session = http.Session.new({
connectTimeout = 2,
readTimeout = 10,
maxConnectionsPerHost = 4,
})
local resp = session:get("https://example.com/api")
session:close()
Server:
local server = http.HttpServer.new(function(req, res)
res:send(200, "Hello, world!")
end, { port = 8080 })
server:listen(function(host, port)
print("Listening on " .. host .. ":" .. tostring(port))
end)
HTTPS Server:
local ssl = require("@eryx/_ssl")
local ctx = ssl.create_server_context("cert.pem", "key.pem")
local server = http.HttpServer.new(handler, { port = 443, sslCtx = ctx })
server:listen()