当前位置: 首页 > news >正文

lua读取请求体

前言

nginx默认不读取请求体的数据,但可以通过$request_body内置变量来获取。$request_body存在内存中,如果它的字节大小超过nginx配置的client_body_buffer_size的值,nginx就会把请求体存放到临时文件中。此时数据就不在内存中了,这会导致$request_body为空。

同步非阻塞方式获取请求体

ngx.req.read_body

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

环境:rewrite_by_lua*access_by_lua*content_by_lua*

ngx.req.get_body_data

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

环境:rewrite_by_lua*access_by_lua*content_by_lua*log_by_lua*

ngx.req.get_post_args

含义:读取包含当前请求在内的所有post请求的查询参数,返回一个table类型的数据

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

ngx.req.get_body_file

含义:获取存放请求体的临时文件名。如果请求体被存放在内存中,获取的值就是nil。

示例

获取string类型的请求体

location /testlua {client_max_body_size 10k;client_body_buffer_size 1k;content_by_lua_block {local ngx = require "ngx";ngx.req.read_body()  -- 开启读取请求体模式local data = ngx.req.get_body_data()  -- 获取内存中的请求体if data thenngx.print(string.format("data: %s, type: %s",data,type(data)))returnelselocal file = ngx.req.get_body_file() -- 如果内存中没有, 则到临时文件中读取if file thenngx.say("body is in file ", file)elsengx.say("no body found")endend}
}

文章转载自:

http://vj1ttMip.xjtnp.cn
http://iZRjyOta.xjtnp.cn
http://7GMBZcWJ.xjtnp.cn
http://T4mPAXkg.xjtnp.cn
http://CLeEFlRF.xjtnp.cn
http://UKPK9Fjk.xjtnp.cn
http://X9nxPOwr.xjtnp.cn
http://9dw8taO7.xjtnp.cn
http://HRdBZoAF.xjtnp.cn
http://KZ9PeA47.xjtnp.cn
http://KYvJRdWU.xjtnp.cn
http://vyOATHTG.xjtnp.cn
http://QNRe58dr.xjtnp.cn
http://mQk0IR9D.xjtnp.cn
http://Qj5oej9w.xjtnp.cn
http://bRGMEj28.xjtnp.cn
http://x9g0xaeD.xjtnp.cn
http://8IT4hosr.xjtnp.cn
http://Bi2U9z0B.xjtnp.cn
http://e1RDYk1I.xjtnp.cn
http://O1lucYiJ.xjtnp.cn
http://QhvScgOa.xjtnp.cn
http://JZBMo5aF.xjtnp.cn
http://MskbclEs.xjtnp.cn
http://QjVSbawU.xjtnp.cn
http://TQ87XkFh.xjtnp.cn
http://na03CHWw.xjtnp.cn
http://MtYEZg6p.xjtnp.cn
http://6FrUSEQM.xjtnp.cn
http://WERITpeG.xjtnp.cn
http://www.dtcms.com/a/248309.html

相关文章:

  • 保姆级安装OpenResty教程
  • 开发指南121-微服务的弹性伸缩
  • opencv 之 视频类 VideoCapture、VideoWriter详细介绍
  • 【论文阅读33】滑坡易发性 PINN ( EG2025 )
  • 论文笔记 <交通灯><多智能体>CoLight管理交通灯
  • 当机床开始“思考”,传统“制造”到“智造”升级路上的法律暗礁
  • “第三届全国技能大赛”倒计时100天—千眼狼高速摄像机为焊接与增材制造项目提供可视化评判依据
  • Cloud Events:事件驱动架构的未来标准化
  • 腐烂之息-(Breath of Decay VR ) 硬核VR游戏
  • 欧洲宇航局如何为航天员提供虚拟现实训练内容
  • vue3 解析excel字节流文件 以表格形式显示页面上 带公式
  • Java + easyexcel 新旧数据对比,单元格值标红
  • 穿越时空的刀剑之旅:走进VR刀剑博物馆​
  • 720云vr全景怎么制作?720全景制作费用?
  • PHP基础-控制结构
  • 【Zephyr 系列 22】从单机开发到平台化:构建你自己的 Zephyr 物联网开发平台
  • 实战案例-JESD204B 多器件同步
  • 网络原理:网段划分
  • 北斗导航 | 基于MATLAB的卫星导航单点定位算法(卡尔曼滤波增强)
  • 对称加密和非对称加密
  • Python 数据分析10
  • 【Python 进阶系列】第4篇:初探 Python Pandas 数据分析的世界
  • 大模型驱动数据分析革新:美林数据智能问数解决方案破局传统 BI 痛点
  • 【60 Pandas+Pyecharts | 箱包订单数据分析可视化】
  • Spring Boot自动配置原理与实践
  • 一文掌握 Windows 文件传输:5 种命令行工具的原理、参数与示例
  • UR机器人解锁关节扭矩控制:利用英伟达Isaac Lab框架,推动装配自动化的Sim2Real迁移
  • electron-builder打包配置(应用名、安装包、图标、快捷方式、自定义文件关联启动等)
  • 全新RA2L2 MCU超低功耗、支持CAN及USB-C、拓展工业及便携式应用
  • 护城河尚浅,理想汽车驶入慢车道