lua resty.http 代理請求時加號變成空格處理方法
阿新 • • 發佈:2020-12-08
鋪墊知識
+號在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 })
這樣到了伺服器端,就沒問題了。