OpenResty下通过lua获取http请求body

最近在码代码的过程中,调试时候发现lua下经常获取不到http请求的body,在官网翻了好多遍文案后有了一个总结,希望对lua开发的同学有些帮助

-- Require Modules
local conf = require "ik_config"

local cjson = require "cjson.safe"
local ngx_req_read_body = ngx.req.read_body
local ngx_req_get_body_data = ngx.req.get_body_data
local ngx_say = ngx.say

local _M = {}
_M._VERSION = '1.0.0'

-- enable check
local function resp()

    ngx_req_read_body()
    local body = ngx_req_get_body_data() 


        -- response data
        ngx_say(cjson_encode({
            ["body"] = body,
            ["success"] = true,
            ["msg"] = ""
        }))


end

重点是这两行

    ngx_req_read_body()
    local body = ngx_req_get_body_data() //这里获取到body,必须先调用上面ngx_req_read_body函数,才能拿到body的data

如不执行 ngx_req_read_body() 是拿不到请求的body

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: openresty lua 可以通过 ngx.req.get_body_data() 函数来获取请求报文数据。如果请求报文是以 application/x-www-form-urlencoded 或 multipart/form-data 格式提交的,也可以通过 ngx.req.get_post_args() 函数来获取请求参数。如果请求报文是以 application/json 格式提交的,可以通过 ngx.req.get_body_data() 函数获取请求体数据,然后使用 json.decode() 函数将其解析为 Lua table。 ### 回答2: 要在OpenResty中接受请求报文数据,可以使用ngx.req模块。这个模块提供了处理请求内容的功能。 首先,我们可以使用ngx.req.get_method函数获取请求方法,例如GET或POST。接下来,可以使用ngx.req.get_headers函数获取请求头的信息,例如User-Agent、Content-Type等。 要获取请求体的内容,可以使用ngx.req.read_body函数来读取请求体。然后,可以使用ngx.req.get_post_args函数来获取请求体的参数。如果请求体的类型是application/x-www-form-urlencoded,那么可以使用ngx.req.get_post_args函数直接获取参数。如果请求体是JSON格式,可以使用ngx.req.get_body_data函数获取请求体的原始数据,然后使用Lua中的json库进行解析。 另外,还可以使用ngx.req.get_uri_args函数来获取URL中的参数。这个函数返回一个Lua表,其中包含了URL中的所有参数。 除了获取请求报文数据,OpenResty还提供了ngx.req.set_header函数来设置请求头的信息。可以使用ngx.req.set_header函数来添加、修改或删除请求头的参数。 在处理完请求报文数据后,可以使用ngx.say函数来像客户端返回响应内容。可以将任何数据作为ngx.say函数的参数进行返回,包括字符串、数值、表等。 总结起来,通过ngx.req模块的函数,我们可以获取请求方法请求头、请求体、URL参数请求报文数据,并且还可以设置请求头和返回响应内容。 ### 回答3: 在OpenResty中,可以通过使用ngx.req.get_body_data()方法接收请求报文数据。 ngx.req.get_body_data()方法用于获取请求报文主体的数据,并且可以在ngx_lua中方便地进行处理。 使用方法如下: local body_data = ngx.req.get_body_data() if body_data then -- 处理请求报文数据 -- ... else -- 请求报文没有主体数据 -- ... end 需要注意的是,ngx.req.get_body_data()方法只能获取请求报文中的主体数据,并不能获取请求报文的其他信息。如果需要获取其他请求信息,可以使用ngx.req.get_uri_args()获取查询参数,ngx.req.get_headers()获取请求头部信息,以及ngx.req.get_method()获取请求方法等。 在使用ngx.req.get_body_data()方法前,需要保证在nginx配置文件中已启用了请求体内容的接收。可以在http或server配置块中添加以下指令: http { # ... client_body_buffer_size 8k; client_max_body_size 8m; # ... } 以上是OpenResty Lua如何接收请求报文数据的方法。通过使用ngx.req.get_body_data()方法,我们可以方便地获取请求报文的主体数据,并进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码者人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值