Citrix ADC

调用HTTP调用

配置HTTP调用后,可以通过包含sys.http_callout(在高级政策规则中的表达。在这个表达式中,<名称>要调用的HTTP调用的名称。

可以使用高级策略表达式操作符和标注表达式来处理响应,然后执行适当的操作。来自HTTP调出代理的响应的返回类型决定了可以在响应上使用的操作符集。如果要分析的响应部分是文本,则可以使用文本操作符来分析响应。例如,可以使用CONTAINS()操作符检查响应的指定部分是否包含特定字符串,如下例所示:

sys.http_callout(mycallout).contains(“良好的IP地址”)<! -  yourcopy  - >

如果在响应器策略中使用上述表达式,则可以配置相应的响应器动作。

类似地,如果希望计算的响应部分是一个数字,则可以使用数字运算符,如GT(int)。如果响应包含布尔值,则可以使用布尔运算符。

注意:HTTP标注可以递归地调用自己。通过将HTTP callout表达式与防止递归的高级策略表达式组合,可以避免HTTP callout递归。有关如何避免HTTP标注递归的信息,请参见避免HTTP标注递归.

还可以通过配置策略来级联HTTP callout,每个策略在评估之前生成的callout之后调用一个callout。在这种情况下,一个政策调用调出后,当Citrix ADC设备发送之前解析callout callout callout服务器,第二组策略可以评估callout和调用额外的标注,这反过来可以评估由第三组策略,等等。下面的示例描述了这样的实现。

首先,您可以配置一个名为myCallout1的HTTP调用,然后配置一个响应器策略Pol1来调用myCallout1。然后,您可以配置第二个HTTP标注myCallout2和响应器策略Pol2。您配置Pol2以评估myCallout1并调用myCallout2。全局绑定两个响应器策略。

为了避免HTTP调用递归,myCallout1配置了一个名为“Request1”的唯一自定义HTTP头。通过使用Advanced策略表达式,Pol1被配置为避免HTTP callout递归,

HTTP.REQ.HEADER(“Request1”).EQ(“调出请求”).NOT.<--需要复制-->

Pol2使用相同的高级策略表达式,但不包括.NOT运算符,以便策略在Citrix ADC设备解析MyCallout 1时对其求值。请注意,MyCallout 2标识其自己的唯一标题“Request2”,Pol2包含一个高级策略表达式,以防止MyCallout 2递归调用自身。

例子:

> add policy httpCallout myCallout1 Done > set policy httpCallout myCallout1 -IPAddress 10.102.3.95 -port 80 -returnType TEXT -hostExpr ""10.102.3.95"" -urlStemExpr "\"/ gi-bin/check_clnt_from_database.pl\"" -headers Request1 ("Callout请求")-parameters cip(CLIENT.IP.SRC) - resultexp "HTTP.RES.BODY(100)"完成>添加响应器策略Pol1 "HTTP.REQ.HEADER(\"Request1\")。EQ(\“Callout请求\”)。不T && SYS.HTTP_CALLOUT(myCallout1).CONTAINS(\"IP Matched\")" RESET Done > bind responder global Pol1 100 END -type OVERRIDE Done > add policy httpCallout myCallout2 Done > set policy httpCallout myCallout2 -IPAddress 10.102.3.96 -port 80 -returnType TEXT -hostExpr "\"10.102.3.96\"" -urlStemExpr "\"/cgi-bin/check_clnt_location_from_database.pl\"" -headers Request2 ("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(200)" Done > add responder policy Pol2 "HTTP.REQ.HEADER(\"Request2\").EQ(\"Callout Request\").NOT && HTTP.REQ.HEADER(\"Request1\").EQ(\"Callout Request\") && SYS.HTTP_CALLOUT(myCallout2).CONTAINS (\"APAC\")" RESET Done > bind responder global Pol2 110 END -type OVERRIDE Done 
调用HTTP调用