Files
daydaytalk-fwutils/target/httpclient.lua
2026-01-08 21:58:41 +08:00

71 lines
2.5 KiB
Lua

local http = require("socket.http")
local ltn12 = require("ltn12")
local cjson = require("cjson")
require("app.app")
local M = {}
M.get = function(url,headers)
local response_body = {}
local res, status_code, response_headers, status_text = http.request{
url = url,
method = "GET",
headers = headers,
sink = ltn12.sink.table(response_body)
}
if not res then
return false,"err_http_get1,status_code:"..(status_code or "N/A")..",status_text:"..(status_text or "N/A")..",response_body:"..table.concat(response_body)
end
if status_code ~= 200 then
return false,"err_http_get2,status_code:"..(status_code or "N/A")..",status_text:"..(status_text or "N/A")..",response_body:"..table.concat(response_body)
end
return true,table.concat(response_body)
end
M.post = function(url,headers,body)
local response_body = {}
headers["Content-Length"] = tostring(#body)
local res, status_code, response_headers, status_text = http.request{
url = url,
method = "POST",
headers = headers,
source = ltn12.source.string(body),
sink = ltn12.sink.table(response_body)
}
if not res then
return false,"err_http_post,status_code:"..(status_code or "N/A")..",status_text:"..(status_text or "N/A")..",response_body:"..table.concat(response_body)
end
if status_code ~= 200 then
return false,"err_http_post,status_code:"..(status_code or "N/A")..",status_text:"..(status_text or "N/A")..",response_body:"..table.concat(response_body)
end
return true,table.concat(response_body)
end
M.delete = function(url,headers)
local response_body = {}
local res, status_code, response_headers, status_text = http.request{
url = url,
method = "DELETE",
headers = headers,
sink = ltn12.sink.table(response_body)
}
if not res then
return false,"err_http_delete,status_code:"..(status_code or "N/A")..",status_text:"..(status_text or "N/A")..",response_body:"..table.concat(response_body)
end
if status_code ~= 200 then
return false,"err_http_delete,status_code:"..(status_code or "N/A")..",status_text:"..(status_text or "N/A")..",response_body:"..table.concat(response_body)
end
return true,table.concat(response_body)
end
-- 生成 A=B&C=D 的格式
M.build_query = function(params)
local query = {}
for k, v in pairs(params) do
table.insert(query, k .. "=" .. v)
end
return table.concat(query, "&")
end
return M