博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Openresty - 读取请求体
阅读量:4698 次
发布时间:2019-06-09

本文共 1751 字,大约阅读时间需要 5 分钟。

由于nginx默认不读取请求体的数据,因此当Lua通过ngx.var.request_body的方式获取请求体时会发现数据为空,那么,该如何获得请求体的数据呢?

方式一:lua_need_request_body

语法:lua_need_request_body<on|off>

默认值:off

环境:http、server、location、

含义:默认为off,即不读取请求体。如果设置为on,则表示强制读取请求体,此时,可以通过ngx.var.request_body来获取请求体的数据。但需要注意一种情况,$request_body存在与内存中,如果它的字节大小超过Nginx配置的client_body_buffer_size的值,Nginx就会把请求体存放到临时文件中。此时数据就不存在与内存中了,这会导致$request_body为空,所以需要设置client_body_buffer_size和client_max_body_size的值相同,避免出现这种情况。

这种配置方式不够灵活,Ngx_Lua官网也不推荐使用此方法。

方式二:ngx.req.read_body

语法:ngx.req.read_body()

环境:rewrite_by_lua*、access_by_lua*、content_by_lua*

含义:同步读取客户端请求体,且不会阻塞Nginx的事件循环。使用此指令后,就可以通过ngx.req.get_body_data来获取请求体的数据了。按如果使用临时文件来存放请求体,就需要先使用函数ngx.req.get_body_file来获取临时文件名,再读取临时文件中的请求体数据。

指令:ngx.req.get_body_data

语法:data = ngx.req.get_body_data()

环境:rewrite_by_lua*、access_by_lua*、content_by_lua*、log_by_lua*

含义:执行ngx.req.read_body指令后,可以使用本指令在内存中获取请求体数据,结果会返回一个Lua的字符串类型数据。如果要获取Lua的table类型的数据,则需要使用ngx.req.get_post_args

指令:ngx.req.get_post_data

语法:args,err=ngx.req.get_post_args(max_args?)

环境:rewrite_by_lua*、access_by_lua*、content_by_lua*、header_filter_by_lua*、body_filter_by_lua*、log_by_lua*

含义:在执行ngx.req.read_body指令后,可以使用本指令读取包含当前请求在内的所有POST值请求的查询参数,返回一个Lua的table类型的数据。max_args参数的作用时限制参数的数量。为了服务的安全,最多支持使用100个参数(包括重复的参数),超过限制的参数会被忽略。如果max_args为0,则表示关闭此限制;但为了避免被无穷多的参数攻击,不要将max_args设置为0,如果最多支持使用10个参数,则应配置为ngx.req.get_post_args(10)。

使用场景:

content_by_lua_block{

  local ngx = require "ngx"

  ngx.req.read_body()

  local data = ngx.req.get_body_data()

  if data then

    ngx.print('ngx.req.get_body_data:',data,')

    return

  else

  lcoal file = ngx.req.get_body_file()

  if file then

    ngx.say("body is in file",file)

  else

    ngx.say("no body found")

  end

}

转载于:https://www.cnblogs.com/trustnature/articles/11111962.html

你可能感兴趣的文章
CSHARP-349
查看>>
基数排序
查看>>
跟我学android-Android应用基本组件介绍(五)
查看>>
UIAlertView
查看>>
通过Instant Client包来使用SQL*PLUS
查看>>
ArcGIS:ArcToolBox工具使用——提取DEM/DSM中的高程点
查看>>
Dwarf Tower
查看>>
pat 1074. 宇宙无敌加法器(20)
查看>>
2.Linux环境下配置Solr4.10.3
查看>>
sqlServer 获取最新的一条数据
查看>>
day29
查看>>
Java Web ServletResponse
查看>>
HTML静态网页--JavaScript-语法
查看>>
es 的crud
查看>>
视频采集以及播放的流程
查看>>
mapreduce排序比较器的选取
查看>>
“饮水机”:形象比喻 深入浅出理解RAID
查看>>
Oracle 安装报错 [INS-06101] IP address of localhost could not be determined 解决方法[转]
查看>>
ASP.NET MVC RedirectToRoute类[转]
查看>>
编码理解
查看>>