Citrix ADC

HTTP-Callout aufrufen

Nachdem Sie eine HTTP-Legende konfiguriert haben, rufen Sie die Legende auf, indem Sie denSYS.HTTP_CALLOUT(<name>) Ausdruck in eine Standardsyntax Richtlinienregel einschließen. In diesem Ausdruck<name> ist der Name der HTTP-Legende, die Sie aufrufen möchten.

Sie können Standard-Syntaxausdruck-Operatoren mit dem Legendenausdruck verwenden, um die Antwort zu verarbeiten und dann eine entsprechende Aktion auszuführen. Der Rückgabetyp der Antwort vom HTTP-Callout-Agent bestimmt die Menge der Operatoren, die Sie für die Antwort verwenden können. Wenn der Teil der Antwort, den Sie analysieren möchten, Text ist, können Sie die Antwort mit einem Textoperator analysieren. Beispielsweise können Sie den <string> Operator CONTAINS () verwenden, um zu überprüfen, ob der angegebene Teil der Antwort eine bestimmte Zeichenfolge enthält, wie im folgenden Beispiel:

SYS.HTTP_CALLOUT(mycallout).contains("Good IP address")

Wenn Sie den vorherigen Ausdruck in einer Responderrichtlinie verwenden, können Sie eine entsprechende Responderaktion konfigurieren.

Wenn der Teil der Antwort, den Sie auswerten möchten, eine Zahl ist, können Sie einen numerischen Operator wie GT (int) verwenden. Wenn die Antwort einen booleschen Wert enthält, können Sie einen booleschen Operator verwenden.

Hinweis: Eine HTTP-Legende kann sich rekursiv aufrufen. HTTP-Callout-Rekursion kann vermieden werden, indem der HTTP-Callout-Ausdruck mit einem Standard-Syntaxausdruck kombiniert wird, der Rekursion verhindert. Weitere Informationen dazu, wie Sie HTTP-Callout-Rekursion vermeiden können, finden Sie unter Vermeiden von HTTP-Callout-Rekursion.

Sie können HTTP-Callouts auch kaskadieren, indem Sie Richtlinien konfigurieren, die jeweils eine Legende aufrufen, nachdem zuvor generierte Callouts ausgewertet wurden. Wenn in diesem Szenario nach dem Aufruf einer Callout eine Richtlinie die Citrix ADC allout analysiert, bevor die Callout an den Callout-Server gesendet wird, kann ein zweiter Satz von Richtlinien die Callout auswerten und zusätzliche Callouts aufrufen, die wiederum durch einen dritten Satz von Richtlinien ausgewertet werden können usw. Eine solche Implementierung wird im folgenden Beispiel beschrieben.

Zuerst können Sie eine HTTP-Legende namens MyCallout1 konfigurieren und dann eine Responder-Richtlinie Pol1 konfigurieren, um myCallout1 aufzurufen. Anschließend können Sie eine zweite HTTP-Legende, MyCallout2 und eine Responder-Richtlinie Pol2 konfigurieren. Sie konfigurieren Pol2, um myCallout1 auszuwerten und myCallout2 aufzurufen. Sie binden beide Responder-Richtlinien global.

Um HTTP-Callout-Rekursion zu vermeiden, wird myCallout1 mit einem eindeutigen benutzerdefinierten HTTP-Header namens Request1 konfiguriert. Pol1 ist so konfiguriert, dass HTTP-Callout-Rekursion vermieden wird, indem der Standard-Syntaxausdruck verwendet wird.

HTTP.REQ.HEADER("Request1").EQ("Callout Request").NOT.

Pol2 verwendet denselben Standard-Syntaxausdruck, schließt jedoch den Operator .NOT aus, sodass die Richtlinie MyCallout1 auswertet, wenn sie von der Citrix ADC Appliance analysiert wird. Beachten Sie, dass MyCallout2 seinen eigenen eindeutigen Header namens Request2 identifiziert und Pol2 einen Standard-Syntaxausdruck enthält, um zu verhindern, dass sich MyCallout2 rekursiv aufruft.

Beispiel:

> 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

HTTP-Callout aufrufen