铺垫知识
+号在http传输中,会转为空格,所以需要额外转义,转为%2B就可以了。
现象描述
今天遇到很奇怪的现象,前端web页面传过来的时间戳是 2020-12-08T00:00:00+08:00 ,我在nginx+lua里面使用 resty.http 来转发请求的时候,发现到服务器端的时间是这样的:2020-12-08T00:00:00 08:00 , 显然,00与08之间的加号没了,转为了空格。
解决办法
在lua代码里面,把+号都替换成%2B ,如
local http = require("resty.http")
local httpc = http.new()
.... 省去获取参数的代码
local new_post_data = ""
for k,v in pairs(post_data) do
if string.find(v,"Date") ~= nil then -- v这个是前端传过来的值,
v = string.gsub(v,"%+08","%%2B08") -- 关键点,转换空格
end
new_post_data = new_post_data .. k .. "=" .. v .. "&"
done
local post_body_len = string.len(post_body)
body = string.sub(post_body,0,post_body_len-1) -- 去掉最后一位与符号&
res,err = httpc:request_uri(url, {
method = method, -- POST
body = body,
headers = headers, -- 自己定义一个吧
keepalive_timeout = 60000, -- ms
})
这样到了服务器端,就没问题了。