Citrix ADC

Invocación de una llamada HTTP

Después de configurar una llamada HTTP, se invoca la llamada mediante la inclusión de la expresión SYS.HTTP_CALLOUT(<name>) en una regla de directiva avanzada. En esta expresión, <name> es el nombre de la llamada HTTP que quiere invocar.

Puede utilizar operadores de expresión de directiva avanzada con la expresión de llamada para procesar la respuesta y, a continuación, realizar una acción adecuada. El tipo de devolución de la respuesta del agente de llamada HTTP determina el conjunto de operadores que se pueden utilizar en la respuesta. Si la parte de la respuesta que quiere analizar es texto, puede utilizar un operador de texto para analizar la respuesta. Por ejemplo, puede usar el <string>operador CONTAINS() para comprobar si la parte especificada de la respuesta contiene una cadena concreta, como en el ejemplo siguiente:

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

Si utiliza la expresión anterior en una directiva de respuesta, puede configurar una acción de respuesta adecuada.

Del mismo modo, si la parte de la respuesta que quieres evaluar es un número, puede usar un operador numérico como GT (int). Si la respuesta contiene un valor booleano, puede usar un operador booleano.

Nota: Una llamada HTTP puede invocarse a sí misma de forma recursiva. Se puede evitar la recursividad de llamadas HTTP combinando la expresión de llamada HTTP con una expresión de directiva avanzada que impide la recursividad. Para obtener información sobre cómo evitar la recursión de llamadas HTTP, consulte Evitar la recursión de llamadas HTTP.

También puede hacer llamadas HTTP en cascada configurando directivas que invocan cada una de ellas una llamada después de evaluar las llamadas generadas previamente. En este caso, después de que una directiva invoca una llamada, cuando el dispositivo Citrix ADC analiza la llamada antes de enviarla al servidor de llamadas, un segundo conjunto de directivas puede evaluar la llamada e invocar llamadas adicionales, que a su vez pueden evaluarse mediante un tercer conjunto de directivas, etc. Esta implementación se describe en el siguiente ejemplo.

En primer lugar, puede configurar una llamada HTTP denominada myCallout1 y, a continuación, configurar una directiva de respuesta, Pol1, para invocar myCallout1. A continuación, podría configurar una segunda llamada HTTP, MyCallout2, y una directiva de respuesta, Pol2. Configurar Pol2 para evaluar myCallout1 e invocar myCallout2. Enlaza ambas directivas de respuesta globalmente.

Para evitar la recursividad de llamadas HTTP, myCallout1 se configura con un encabezado HTTP personalizado único denominado “Request1”. “ Pol1 está configurado para evitar la recursividad de llamadas HTTP mediante la expresión de directiva avanzada,

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

Pol2 utiliza la misma expresión de directiva avanzada, pero excluye el operador .NOT para que la directiva evalúe MyCallout1 cuando el dispositivo Citrix ADC lo está analizando. Tenga en cuenta que myCallout2 identifica su propio encabezado único denominado “Request2” y Pol2 incluye una expresión de directiva avanzada para evitar que MyCallout2 se invoque de forma recursiva.

Ejemplo:

> 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-->
Invocación de una llamada HTTP