Saltar a contenido

reqargs: Leer argumentos de solicitud application/x-www-form-urlencoded, multipart/form-data y application/json

Instalación

Si no has configurado la suscripción al repositorio RPM, regístrate. Luego puedes proceder con los siguientes pasos.

CentOS/RHEL 7 o Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-reqargs

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-reqargs

Para utilizar esta biblioteca Lua con NGINX, asegúrate de que nginx-module-lua esté instalado.

Este documento describe lua-resty-reqargs v1.4 lanzado el 07 de enero de 2017.


Ayudante para recuperar argumentos de solicitud application/x-www-form-urlencoded, multipart/form-data y application/json.

Sinopsis

local get, post, files = require "resty.reqargs"()
if not get then
    error(post)
end
-- Usar get, post y files...

API

Este módulo tiene solo una función, y esa función se carga con require:

local reqargs = require "resty.reqargs"

get, post, files regargs(options)

Cuando llamas a la función (reqargs) puedes pasarle options. Estas opciones anulan cualquier cosa que hayas definido en tu configuración de Nginx (o los valores predeterminados). Puedes usar las siguientes opciones:

{
    tmp_dir          = "/tmp",
    timeout          = 1000,
    chunk_size       = 4096,
    max_get_args     = 100,
    max_post_args    = 100,
    max_line_size    = 512,
    max_file_uploads = 10
}

Esta función devolverá tres (3) valores de retorno, que se llaman get, post y files. Estas son tablas Lua que contienen los datos que fueron solicitados (HTTP). get contiene los argumentos de solicitud GET de HTTP recuperados con ngx.req.get_uri_args. post contiene ya sea los argumentos de solicitud POST de HTTP recuperados con ngx.req.get_post_args, o en caso de application/json (como un encabezado de tipo de contenido para la solicitud), leerá el cuerpo de la solicitud y decodificará el JSON, y el post contendrá la estructura JSON decodificada presentada como tablas Lua. El último valor de retorno files contiene todos los archivos subidos. El valor de retorno files solo contendrá datos cuando realmente haya archivos subidos y que el tipo de contenido de la solicitud esté configurado como multipart/form-data. files tiene la misma estructura que get y post para las claves, pero los valores se presentan como tablas Lua, que se ven así (piensa en $_FILES de PHP):

{
    -- El nombre del campo de formulario de carga de archivos (igual que la clave)
    name = "photo",
    -- El nombre del archivo que el usuario seleccionó para la carga
    file = "cat.jpg",
    -- El tipo MIME del archivo subido
    type = "image/jpeg"
    -- El tamaño del archivo subido (en bytes)
    size = 123465
    -- La ubicación donde se transmitió el archivo subido
    temp = "/tmp/????"
}

En caso de error, esta función devolverá nil, mensaje de error.

Variables de Configuración de Nginx

Puedes configurar varios aspectos de lua-resty-reqargs directamente desde la configuración de Nginx, aquí están los valores de configuración que puedes usar, y sus valores predeterminados:

## el valor predeterminado es el directorio temporal del sistema
set $reqargs_tmp_dir           /tmp;
## ver https://github.com/openresty/lua-resty-upload
set $reqargs_timeout           1000;
## ver https://github.com/openresty/lua-resty-upload
set $reqargs_chunk_size        4096;
## ver https://github.com/openresty/lua-nginx-module#ngxreqget_uri_args
set $reqargs_max_get_args      100;
## ver https://github.com/openresty/lua-nginx-module#ngxreqget_post_args
set $reqargs_max_post_args     100;
## ver https://github.com/openresty/lua-resty-upload
set $reqargs_max_line_size     512;  
## el valor predeterminado es ilimitado
set $reqargs_max_file_uploads  10;

Cambios

Los cambios de cada versión de este módulo se registran en el archivo Changes.md.

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-reqargs.