Citrix ADC

HTTP コールアウトの呼び出し

HTTP コールアウトを設定したら、詳細ポリシールールにSYS.HTTP_CALLOUT(<name>)式を含めることによってコールアウトを呼び出します。この式で、<name>は、呼び出す HTTP コールアウトの名前です。

コールアウト式で高度なポリシー式演算子を使用して、応答を処理し、適切なアクションを実行できます。HTTP コールアウトエージェントからの応答の戻り値の型によって、応答に使用できる演算子のセットが決まります。分析する応答の一部がテキストの場合、テキスト演算子を使用して応答を分析できます。たとえば、CONTAINS (\ <string\ >) 演算子を使用して、次の例のように、レスポンスの指定された部分に特定の文字列が含まれているかどうかを確認できます。

SYS.HTTP_CALLOUT(mycallout).contains("Good IP address")
<!--NeedCopy-->

レスポンダーポリシーで前述の式を使用する場合は、適切なレスポンダーアクションを構成できます。

同様に、評価する応答の一部が数値である場合は、GT (int) などの数値演算子を使用できます。応答にブール値が含まれている場合は、ブール演算子を使用できます。

注:HTTP コールアウトは自身を再帰的に呼び出すことができます。HTTP コールアウトの再帰を回避するには、HTTP コールアウト式を再帰を防止する高度なポリシー式と組み合わせます。HTTP コールアウトの再帰を回避する方法については、「HTTP コールアウトの再帰を回避する」を参照してください。

以前に生成されたコールアウトを評価した後にコールアウトを呼び出すポリシーを設定することで、HTTP コールアウトをカスケードすることもできます。このシナリオでは、1つのポリシーがコールアウトを呼び出した後、Citrix ADCアプライアンスがコールアウトを解析してからコールアウトサーバーに送信すると、2番目のポリシーセットがコールアウトを評価し、追加のコールアウトを呼び出すことができます。コールアウトは、第3のポリシーセットによって評価されます。このような実装を次の例で説明します。

まず、myCallout1 という名前の HTTP コールアウトを設定し、次に myCallout1 を呼び出すようにレスポンダーポリシー Pol1 を構成します。次に、2 番目の HTTP コールアウト myCallout2 とレスポンダーポリシー Pol2 を設定できます。myCallout1 を評価し、myCallout2 を呼び出すように Pol2 を設定するとします。両方のレスポンダーポリシーをグローバルにバインドします。

HTTP コールアウトの再帰を避けるために、myCallout1 は「Request1」という一意のカスタム HTTP ヘッダーで設定されています。Pol1 は、高度なポリシー式を使用して HTTP コールアウトの再帰を回避するように設定されています。

HTTP.REQ.HEADER("Request1").EQ("Callout Request").NOT.
<!--NeedCopy-->

Pol2は同じ詳細ポリシー式を使用しますが、.NOT演算子は除外されるため、Citrix ADCアプライアンスが解析しているときにポリシーがMyCallout1を評価します。myCallout2 は「Request2」と呼ばれる独自のヘッダーを識別し、Pol2 には myCallout2 が自身を再帰的に呼び出さないようにする高度なポリシー式が含まれています。

例:

> add policy httpCallout myCallout1

Done

> set policy httpCallout myCallout1 -IPAddress 10.102.3.95 -port 80 -returnType TEXT -hostExpr
 ""10.102.3.95"" -urlStemExpr ""/cgi-bin/check_clnt_from_database.pl"" -headers Request1
("Callout Request") -parameters cip(CLIENT.IP.SRC) -resultExpr "HTTP.RES.BODY(100)"

Done

> add responder policy Pol1 "HTTP.REQ.HEADER("Request1").EQ("Callout Request").NOT &&
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
<!--NeedCopy-->
HTTP コールアウトの呼び出し