Maison  >  Questions et réponses  >  le corps du texte

luajit - Problème avec nginx+lua pour obtenir les paramètres POST

Chers maîtres, j'ai besoin de déterminer les paramètres dans l'url pour obtenir la valeur du paramètre de service. L'url a des requêtes GET et POST. Je l'ai fait en utilisant nginx+lua. Le code est le suivant :

        location / {
                set_by_lua $service '
                        local request_method = ngx.var.request_method
                        if request_method == "GET" then
                                local arg = ngx.req.get_uri_args()["service"] or 0
                                return arg
                        elseif request_method == "POST" then
                                ngx.req.read_body()
                                local arg = ngx.req.get_post_args()["service"] or 0
                                return arg
                        end;';
                
                if ($service = 'register')
                        {       
                                proxy_pass http://userinfo;
                        }
                                
                proxy_redirect off;
                proxy_set_header HOST $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

Le problème maintenant est que lorsque je demande en utilisant GET, tout est normal, mais lors d'une demande en utilisant POST, Nginx signale une erreur 500.

J'utilise le code suivant pour déboguer :

local request_method = ngx.var.request_method
if request_method == "GET" then
        local arg = ngx.req.get_uri_args()["service"] or 0
        ngx.say(arg)
elseif request_method == "POST" then
        ngx.req.read_body()
        local arg = ngx.req.get_post_args()["service"] or 0
        ngx.say(arg)
end

Les valeurs des paramètres de service imprimées dans les méthodes de requête GET et POST sont correctes.

Maintenant, je ne sais pas où se situe le problème ? Demandez à Dieu de me le dire. gratitude. . .

黄舟黄舟2713 Il y a quelques jours1102

répondre à tous(3)je répondrai

  • 为情所困

    为情所困2017-05-16 17:18:40

    Lorsque vous utilisez set_by_lua, s'il s'agit d'une soumission POST, lors de l'appel de ngx.req.read_body(), il est interdit d'appeler le read_body dans le module set_by_lua (échec de l'exécution de set_by_lua : set_by_lua:6 : API désactivée dans le contexte de set_by_lua
    stack traceback : [C] : dans la fonction 'read_body' set_by_lua:6 : dans la fonction <set_by_lua:1>);
    Mais vous pouvez utiliser rewrite_by_lua, tel que :
    location / {

               set $service '';
               rewrite_by_lua  '
                        local request_method = ngx.var.request_method
                        if request_method == "GET" then
                                local arg = ngx.req.get_uri_args()["service"] or 0
                                ngx.var.service = arg
                        elseif request_method == "POST" then
                                ngx.req.read_body()
                                local arg = ngx.req.get_post_args()["service"] or 0
                                ngx.var.service = arg
                        end;';
                
                if ($service = 'register')
                        {       
                                proxy_pass http://userinfo;
                        }
                                
                proxy_redirect off;
                proxy_set_header HOST $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    

    J'espère que cela pourra vous aider. De plus, il est recommandé de ne pas utiliser $service comme nom de variable. Il se peut que le mot-clé soit en conflit avec la variable système.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-05-16 17:18:40

    Veuillez me donner quelques conseils à partir de l'affiche originale. Je ne sais pas pourquoi mon ngx.req.get_post_args() n'obtient jamais la valeur, mais ngx.req.get_body_data() le fait. Quelle pourrait en être la raison ?

    répondre
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:18:40

    ngx.req.get_post_args() ne peut être utilisé que dans les étapes rewrite_by_lua, access_by_lua, content_by_lua*, et vous devez appeler ngx.req.read_body() avant utilisation, ou activer l'option
    lua_need_request_body pour forcer ce module pour lire le corps de la requête (cette méthode n'est pas recommandée)

    répondre
    0
  • Annulerrépondre