sync.lua 是这样的,附件一直发不上去。。
function split(s, delimiter)
local result = {}
local from = 1
local delim_from, delim_to = string.find(s, delimiter, from)
while delim_from do
table.insert(result, string.sub(s, from, delim_from - 1))
from = delim_to + 1
delim_from, delim_to = string.find(s, delimiter, from)
end
table.insert(result, string.sub(s, from))
return result
end
local post_data = ngx.req.get_body_data()
local commands = split(post_data, "||")
for _, command in pairs(commands) do
--command = ngx.unescape_uri(command)
local request_args = ngx.decode_args(command, 0)
for key, value in pairs(request_args) do
ngx.say(key, ": ", value)
end
ngx.say("===============")
end
ngx.exit(ngx.HTTP_OK)
将多个url encode后的query 用'||'连接后post给nginx,nginx解析先根据'||'分割,然后一次处理各个query
如:
curl -d "method=zadd&key=User%3A1227713%3Alikes%3Atwitters&arg1=1356514698&arg2=780984852||method=zadd&key=User%3A1227713%3Alikes%3Atwitters&arg1=1356514698&arg2=780984852||method=zadd&key=User%3A1227713%3Alikes%3Atwitters&arg1=1356514698&arg2=780984852" http://192.168.1.3/sync
如果在ngx.decode_args之前不执行ngx.unescape_uri的话,会出现解析错误的情况:
arg2: 780984852
method: zadd
key: User:1227713:likes:twitters
arg1: 1356514698
===============
arg2: 780984852
method: zadd
key: User:1227713:likes:twittersitters
arg1: 1356514698
===============
arg2: 780984852
method: zadd
key: User:1227713:likes:twittersitters
arg1: 1356514698
===============
手动执行次 ngx.unescape_uri,才能正常解析:
arg2: 780984852
method: zadd
key: User:1227713:likes:twitters
arg1: 1356514698
===============
arg2: 780984852
method: zadd
key: User:1227713:likes:twitters
arg1: 1356514698
===============
arg2: 780984852
method: zadd
key: User:1227713:likes:twitters
arg1: 1356514698
===============