Nginx+Lua实现对post请求参数的修改,json格式的
Nginx配置
location / {
...
if ($request_method = "POST") {
access_by_lua_file /xxx/xxx/test.lua;
}
}
Lua配置
test.lua
function set_Request_body()
ngx.req.read_body()
local retTable = {}
local jsonStr = nil
local ok = nil
local json = require("cjson")
local oldData = ngx.req.get_body_data() --获取原先的请求体,字符串格式
if (oldData ~= nuil) then --判断原先是否有请求体
ok, retTable = pcall(cjson.decode, oldData ) --判断原先数据是否是json格式
if not ok then
ngx.log(ngx.ERR, 'post data is not json!', oldData )
--如果不是json格式,做xxx操作
else
--是json格式,做xxx操作
end
else
--原先没有请求体的情况,做xxx操作
retTable["test1"] = "test1" --以json的格式添加一个数据
end
jsonStr = cjson.encode(retTable) --将数组转换为字符串
if (jsonStr ~= nuil) then
ngx.req.set_body_data(jsonStr) --将字符串设置为请求体
end
end
if ngx.req.get_method() == "POST" then
set_Request_Body()
end