
---@class socket_http_request*
---@field url? string URL。
---@field method? string HTTP 方法。
---@field headers? table<string, string> 请求头。
---@field source? ltn12_source 请求体 source。
---@field sink? ltn12_sink 响应体 sink。
---@field body? string 请求体。
---@field proxy? string 代理 URL。
---@field redirect? boolean 是否允许重定向。
---@field create? function socket 创建函数。

---@class socket_http_connection*
local socket_http_connection = {}

---@class socket_http*
---@field TIMEOUT number 默认超时。
---@field USERAGENT string 默认 User-Agent。
---@field genericform table 通用请求字段。
---@field schemes table<string, table> scheme 配置。
---@type socket_http*
local M = {}

M.TIMEOUT = 60
M.USERAGENT = nil
M.genericform = nil
M.schemes = nil

--- 打开 HTTP 连接。
---@param host string 主机名。
---@param port? integer 端口。
---@param create? function socket 创建函数。
---@return socket_http_connection*? connection 连接对象。
---@return string? errMsg 错误信息。
function M.open(host, port, create) end

--- 发起 HTTP 请求。
---@param request string|socket_http_request* URL 或请求表。
---@param body? string 请求体。
---@return string|integer|nil bodyOrOk 响应体或 LTN12 状态。
---@return integer|string? statusCodeOrErr 状态码或错误信息。
---@return table? headers 响应头。
---@return string? statusLine 状态行。
function M.request(request, body) end

--- LuaSocket try 函数。
---@param ... any 值。
---@return any ... 非错误返回值。
function M.try(...) end

--- 关闭连接。
---@return any result 关闭结果。
function socket_http_connection:close() end

return M
