Nginx资料之uri参数

◆ 获取uri参数:
1.获取get请求参数:ngx.req.get_uri_args
2.获取post请求参数ngx.req.get_post_args

   location /print_param {
       content_by_lua_block {
           local arg = ngx.req.get_uri_args()
           for k,v in pairs(arg) do
               ngx.say("[GET ] key:", k, " v:", v)
           end
           ngx.req.read_body() -- 解析 body 参数之前一定要先读取 body
           local arg = ngx.req.get_post_args()
           for k,v in pairs(arg) do
               ngx.say("[POST] key:", k, " v:", v)
           end
       }
   }
➜  ~  curl '127.0.0.1/print_param?a=1&b=2%26' -d 'c=3&d=4%26'
[GET ] key:b v:2&
[GET ] key:a v:1
[POST] key:d v:4&
[POST] key:c v:3

◆ 传递请求 uri 参数:
URI内容传递过程中是需要调用 ngx.encode_args 进行规则转义。

location /test {
       content_by_lua_block {
           local res = ngx.location.capture(
                    '/print_param',
                    {
                       method = ngx.HTTP_POST,
                       args = ngx.encode_args({a = 1, b = '2&'}),
                       body = ngx.encode_args({c = 3, d = '4&'})
                   }
                )
           ngx.say(res.body)
       }
   }

输出结果:

    ➜  ~  curl '127.0.0.1/test'
    [GET]  key:b v:2&
    [GET]  key:a v:1
    [POST] key:d v:4&
    [POST] key:c v:3

◆ 获取请求body内容
需先设置lua_need_request_body on,然后再用ngx.req.get_body_data()获取body数据

http {
    server {
        listen    80;
        # 默认读取 body
        lua_need_request_body on;
        location /test {
            content_by_lua_block {
                local data = ngx.req.get_body_data()
                ngx.say("hello ", data)
            }
        }
    }
}
再次测试,符合我们预期:
➜  ~  curl 127.0.0.1/test -d jack
hello jack
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值