我有一个 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 变量。这就是我能够使用您的代码从请求主体中提取所需变量的方法。