nginx - Nginx Lua 扩展读取多部分形式的正文,使其保持完整(代理)
问题描述
我正在使用 OpenResty。目标是在 Nginx 上使用 Lua 创建一些中间件,以便我可以检查正文中的某些字段,但是在读取字段后保持正文完好无损。事实上,在某些情况下,我想从正文中删除字段。
在application/x-www-form-urlencoded
我能够使用的情况下
ngx.req.read_body()
local args = ngx.req.get_post_args()
并且身体确实可以通过我的后端而不会受到影响。
在application/json
我能够使用的情况下
ngx.req.read_body()
local args = json.decode(ngx.req.get_body_data())
但是,当内容类型为multipart/form-data
并且我尝试使用resty.upload时,我无法弄清楚如何将正文附加到请求中,更不用说在我想这样做时对其进行编辑了。
在它的最基本形式中,使用 resty.upload 库需要阅读多部分表单
local form, err = upload:new(chunk_size)
然而,当我这样做时,后端服务器没有收到任何正文内容。
这段代码似乎有两个开放的拉取请求,即1和2 ,尽管我尝试使用这两个版本的 upload.lua 均无济于事。
我已经看到有些图书馆旨在处理这种情况,例如
- https://github.com/thibaultcha/lua-resty-multipart
- https://github.com/agentzh/lua-resty-multipart-parser
然而,这两个都受到较大的上传文件的影响,我不能受此限制。在这两种情况下,他们都建议使用我正在使用的 resty.upload 库。
最终,无论是否调用字段的上述内容类型,我都会在正文中查找,X_CUSTOM_FIELD
如果存在,请将其记录并完全从请求中删除。
我还没有弄清楚如何从身体上剥离它,但第一步是确保我至少可以在不篡改的情况下阅读它。非常感谢任何帮助
解决方案
推荐阅读
- python - python scrapy css选择器不是常量格式抓取
- html - 通过设置填充去除顶部的空白
- dns - 如何通过 Synology Open VPN 获得我的 dns?
- rust - 为什么 IntoIterator 特征需要显式指定关联类型 Item?
- javascript - 你如何自动化由 webhook 帖子触发的 GitHub 拉取?
- android - adb:无法打开 app.apk:不允许操作
- .net-core - 将 XDocument 与 Visual Studio Mac .Net Core 一起使用
- javascript - 所有人共享的First Load JS在next.js中相当重
- z3py - 有没有一种方法可以在 Z3py 的条件语句中添加约束?
- r - 运行 docker 镜像时如何引用其他目录中的文件?