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)
         }
     }
}

但默認情況下可能會得到一個nil的結果。這是因爲之前nginx的定位是消息轉發,而不是處理消息體。若需要獲取消息體,需要在打開獲取消息體的開關。增加一行代碼:lua_need_request_body on;

代碼如下:

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)
         }
     }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章