local lor = require("lor.index")
local cjson = require("cjson")
local template = require("resty.template")
local mongo = require ("resty.mongol")
local http = require("socket.http")
local ltn12 = require("ltn12")
conn = mongo:new()
conn:set_timeout(1000)
ok, err = conn:connect("127.0.0.1", 27017)
if not ok then
print("connect failed: "..err)
end
local db = conn:new_db_handle("fancy")
local app = lor()
local example = "/home/an/lua_project/app/views/example/"
-- 模板配置
app:conf("view enable", true)
app:conf("view engine", "tmpl")
app:conf("view ext", "php")
app:conf("views", "/home/an/lua_project/app/views/example/")
function Split(szFullString, szSeparator)
local nFindStartIndex = 1
local nSplitIndex = 1
local nSplitArray = {}
while true do
local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex)
if not nFindLastIndex then
nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString))
break
end
nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1)
nFindStartIndex = nFindLastIndex + string.len(szSeparator)
nSplitIndex = nSplitIndex + 1
end
return nSplitArray
end
function tableToString(studentNum)
local str = "{ "
str = str.."\n"
for k, v in pairs(studentNum) do
if type(v) ~= "table" then
str = str.."[\""..k.."\"]"
str = str..":"
str = str..v
str = str..","
str = str.."\n"
else
str = str.."[\""..k.."\"]"
str = str..":"
str = str..tableToString(v)
str = str..","
str = str.."\n"
end
end
str = string.sub(str, 1, -3)
str = str.."\n"
str = str .." }"
return str
end
function get_req(url, headers)
local response_body = {}
response, status_code, headers = http.request {
method = "GET",
url = url,
headers = headers,
sink = ltn12.sink.table(response_body),
}
if status_code == 200 then
return response_body
else
return nil
end
end
function post_req(url, headers, postdata_json)
local response_body = {}
headers["content-length"] = string.len(postdata_json)
response, status_code, headers = http.request {
method = "POST",
url = url,
source = ltn12.source.string(postdata_json),
headers = headers,
sink = ltn12.sink.table(response_body),
}
if status_code == 200 then
return response_body
else
return nil
end
end
function get_demo(post_data)
local url = "http://127.0.0.1:8000/v1/get"
return nil
end
function post_demo(post_data, headers)
local url = "http://127.0.0.1:8000/v1/post/ajax"
local postdata_json = cjson.encode(post_data)
local response_body = post_req(url, headers, postdata_json)
if response_body then
return response_body
else
return nil
end
end
function post_downloads_html(post_data, headers)
local url = "http://127.0.0.1:8000/v1/downloads_html"
local postdata_json = cjson.encode(post_data)
local response_body = post_req(url, headers, postdata_json)
if response_body then
return response_body
else
return nil
end
end
app:get("/post/test", function(req, res, next)
local he = req.headers
local url = "http://127.0.0.1:8000/v1/post"
local host = Split(url, "/")[3]
local postdata = {}
postdata["test"] = 1
local postdata_json = cjson.encode(postdata)
headers = {["Host"] = host,
["Accept"] = "*/*",
["Accept-Encoding"] = "gzip, deflate",
["Referer"] = he["Referer"],
["Content-Type"] = "application/json",
["content-length"] = string.len(postdata_json),
["User-Agent"] = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.103 Chrome/73.0.3683.103 Safari/537.36",
}
local response_body = post_req(url, headers, postdata_json)
if response_body then
res:send(response_body[1])
--res:send("hello world! body: "..tableToString(response_body))
else
res:send("get url is nil")
end
end)
app:get("/", function(req, res, next)
res:render("example/index", {
})
end)
function file_exists(path)
local file = io.open(path, "rb")
if file then file:close() end
return file ~= nil
end
local function read_files(fileName)
local f = assert(io.open(fileName, 'r'))
local content = f:read("*all")f:close()
return content
end
app:get("/market/index.php", function(req, res, next)
local query = req.query
local month = query.month
local uri = req.origin_uri
local file_ = Split(uri, "?")[2]
if not file_ then
res:render("market/index", {})
else
local file_name = string.format("%stest/index.php_%s", example, file_)
local status = file_exists(file_name)
if status == false then
local post_ = {}
post_["url"] = uri
local dowon = post_downloads_html(post_, req.headers)
end
local html_body = read_files(file_name)
res:html(html_body)
end
end)
app:post("/ajax/get_data_format.php", function(req, res, next)
local post_data_ = ngx.req.get_body_data()
local get_data_format = db:get_col("get_data_format")
find_data_ = get_data_format:find_one({post_data=post_data_})
if find_data_ then
res:status(200):send(find_data_["data"])
else
local post_ = {}
local key = "get_data_format"
post_["key"] = key
post_["post_data"] = post_data_
local data_ = post_demo(post_, req.headers)
res:status(200):send(data_)
end
end)