将 XML 请求主体变量提取到 nginx 变量中

将 XML 请求主体变量提取到 nginx 变量中

我有一个 XML 请求主体,我想从中提取一个值,例如:

<?xml version="1.0" ?><Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><Body><myvariable>123</myvariable></Body></Envelope>

我想提取标签中的值,将其分配给 nginx 变量,然后如果设置了该值,则使用它进行速率限制。

就我的研究而言,从 $request_body 变量中提取基于正则表达式的组的唯一方法是通过如下映射:

map $request_body $student_id {
    "~.*<myvariable>(.*)</myvariable>.*" $s;
    default 0;
}

我的理解是 $s 变量将保存捕获组,然后我可以像这样使用它:

if ($s = 123)
{
    rate_limit;
}

但上述方法不起作用。有人做过类似的事情吗?任何指点都将不胜感激。

答案1

在 map 方法中,我将用 $1 替换 $s,这样它就会将提取的值分配给 student_id。因此,您可以在 if 语句中使用 student_id 变量。这就是我能够使用您的代码从请求主体中提取所需变量的方法。

相关内容