1. 程式人生 > 實用技巧 >lua resty.http 代理請求時加號變成空格處理方法

lua resty.http 代理請求時加號變成空格處理方法

鋪墊知識

+號在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
})

這樣到了伺服器端,就沒問題了。