nginx使用ngx.req.get_body_data()獲取不到請求體內容
Nginx中可以使用在lua塊中使用ngx.req.get_body_data()獲取http請求的訊息體。
程式碼如下:
server {
listen 7070;
charset utf-8;
server_name localhost;
location ~/yxl/(.*)/(.*) {
content_by_lua_block {
local data = ngx.req.get_body_data()
ngx.say(data)
}
}
}
但預設情況下可能會得到一個
程式碼如下:
server {
listen 7070;
charset utf-8;
server_name localhost;
lua_need_request_body on;
location ~/yxl/(.*)/(.*) {
content_by_lua_block {
local data = ngx.req.get_body_data()
ngx.say(data)
}
}
}
如此即可順利獲取訊息體的內容。
但上述方法強制本模組讀取訊息體,因此不推薦使用,獲取訊息體推薦使用以下方法,在獲取訊息體程式碼附近,增加一句ngx.req.read_body(),程式碼如下:
server {
listen 7070;
charset utf-8;
server_name localhost;
location ~/yxl/(.*)/(.*) {
content_by_lua_block {
ngx.req.read_body()
local data = ngx.req.get_body_data()
ngx.say(data)
}
}
}