[comment]: # ({062bc405-eb22f00a})
# 9 HTTP agent

[comment]: # ({/062bc405-eb22f00a})

[comment]: # ({d15d6778-a236c83a})
#### Resumen

Este tipo de item permite la sondeo de datos mediante el protocolo HTTP/HTTPS.
También es posible el trapping mediante la utilidad [Zabbix sender](/manual/concepts/sender) o el [protocolo](/manual/appendix/protocols/zabbix_sender) de Zabbix sender (para enviar datos al server o proxy de Zabbix), o mediante el método de API [`history.push`](/manual/api/reference/history/push) (para enviar datos al server de Zabbix).

Las comprobaciones de items HTTP son ejecutadas por el server de Zabbix. Sin embargo, cuando los hosts son
monitorizados por un proxy de Zabbix, las comprobaciones de items HTTP son ejecutadas por el proxy.

Las comprobaciones de items HTTP no requieren ningún agent en ejecución en el host que se está
monitorizando.

HTTP agent admite tanto HTTP como HTTPS. Zabbix seguirá opcionalmente
las redirecciones (consulte la opción *Seguir redirecciones* más abajo). El número máximo de
redirecciones está codificado de forma fija en 10 (usando la opción de cURL CURLOPT\_MAXREDIRS).

::: noteimportant
El server/proxy de Zabbix debe estar configurado inicialmente con soporte para cURL (libcurl).
:::

Las comprobaciones HTTP se ejecutan de forma asíncrona: no es necesario recibir la respuesta de una solicitud antes de que se inicien otras comprobaciones. La resolución DNS también es asíncrona.

La concurrencia máxima de las comprobaciones asíncronas es 1000 (definida por [MaxConcurrentChecksPerPoller](/manual/appendix/config/zabbix_server#maxconcurrentchecksperpoller)).

El número de pollers asíncronos de HTTP agent se define mediante el parámetro [StartHTTPAgentPollers](/manual/appendix/config/zabbix_server#starthttpagentpollers).

La función de conexiones persistentes de cURL se ha añadido a las comprobaciones de HTTP agent desde Zabbix 7.0.

[comment]: # ({/d15d6778-a236c83a})

[comment]: # ({df1df5d7-11697b04})
#### Configuration

Para configurar un item HTTP:

1. Vaya a *Data collection* > *Hosts*.
2. Haga clic en *Items* en la fila del host.
3. Haga clic en *Create item*.
4. Introduzca los parámetros del item en el formulario.

![](../../../../../assets/en/manual/config/items/itemtypes/http_item.png){width="600"}

Todos los campos obligatorios están marcados con un asterisco rojo.

Los campos que requieren información específica para los items HTTP son:

|Parameter|Description|
|--|--------|
|*Type*|Seleccione **HTTP agent** aquí.|
|*Key*|Introduzca una clave de item única.|
|*URL*|URL a la que conectarse y desde la que recuperar datos. Por ejemplo:<br>https://www.example.com<br>http://www.example.com/download<br>Los nombres de dominio pueden especificarse con caracteres Unicode. Se convierten automáticamente a punycode en ASCII al ejecutar la comprobación HTTP.<br>El botón *Parse* puede utilizarse para separar los campos de consulta opcionales (como ?name=Admin&password=mypassword) de la URL, moviendo los atributos y valores a *Query fields* para su codificación automática en URL.<br>Limitado a 2048 caracteres.<br>Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto establece la opción de cURL [CURLOPT\_URL](https://curl.haxx.se/libcurl/c/CURLOPT_URL.html).|
|*Query fields*|Variables para la URL (vea arriba).<br>Especificadas como pares de atributo y valor.<br>Los valores se codifican automáticamente en URL. Los valores de las macros se resuelven y luego se codifican automáticamente en URL.<br>Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto establece la opción de cURL [CURLOPT\_URL](https://curl.haxx.se/libcurl/c/CURLOPT_URL.html).|
|*Request type*|Seleccione el tipo de método de solicitud: *GET*, *POST*, *PUT* o *HEAD*|
|*Request body type*|Seleccione el tipo de cuerpo de la solicitud:<br>**Raw data** - cuerpo de solicitud HTTP personalizado, las macros se sustituyen pero no se realiza ninguna codificación<br>**JSON data** - cuerpo de solicitud HTTP en formato JSON. Las macros pueden usarse como cadena, número, true y false; las macros usadas como cadenas deben ir entre comillas dobles. Los valores de las macros se resuelven y luego se escapan automáticamente. Si "Content-Type" no se especifica en los encabezados, el valor predeterminado será "Content-Type: application/json"<br>**XML data** - cuerpo de solicitud HTTP en formato XML. Las macros pueden usarse como nodo de texto, atributo o sección CDATA. Los valores de las macros se resuelven y luego se escapan automáticamente en un nodo de texto y en un atributo. Si "Content-Type" no se especifica en los encabezados, el valor predeterminado será "Content-Type: application/xml"<br>*Note* que seleccionar *XML data* requiere libxml2.|
|*Request body*|Introduzca el cuerpo de la solicitud.<br>Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.|
|*Headers*|Encabezados HTTP personalizados que se enviarán al realizar una solicitud.<br>Especificados como pares de atributo y valor.<br>Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto establece la opción de cURL [CURLOPT\_HTTPHEADER](https://curl.haxx.se/libcurl/c/CURLOPT_HTTPHEADER.html).|
|*Required status codes*|Lista de códigos de estado HTTP esperados. Si Zabbix obtiene un código que no está en la lista, el item pasará a no ser compatible. Si está vacío, no se realiza ninguna comprobación.<br>Por ejemplo: 200,201,210-299<br>Macros compatibles en la lista: macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto utiliza la opción de cURL [CURLINFO\_RESPONSE\_CODE](https://curl.haxx.se/libcurl/c/CURLINFO_RESPONSE_CODE.html).|
|*Follow redirects*|Marque la casilla para seguir redirecciones HTTP.<br>Esto establece la opción de cURL [CURLOPT\_FOLLOWLOCATION](https://curl.haxx.se/libcurl/c/CURLOPT_FOLLOWLOCATION.html).|
|*Retrieve mode*|Seleccione la parte de la respuesta que debe recuperarse:<br>**Body** - solo el cuerpo<br>**Headers** - solo los encabezados<br>**Body and headers** - cuerpo y encabezados|
|*Convert to JSON*|Los encabezados se guardan como pares de atributo y valor bajo la clave "header" si *Retrieve mode* no está configurado como *Body*.<br>Si se encuentra 'Content-Type: application/json', el cuerpo se guarda como un objeto; de lo contrario, se almacena como cadena, por ejemplo:<br>![](../../../../../assets/en/manual/config/items/itemtypes/http_conv_json.png)|
|*HTTP proxy*|Puede especificar un proxy HTTP que se utilizará, usando el formato `[protocol://][username[:password]@]proxy.example.com[:port]`.<br>El prefijo opcional `protocol://` puede utilizarse para especificar protocolos de proxy alternativos (por ejemplo, https, socks4, socks5; consulte la [documentación](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html); la compatibilidad con el prefijo de protocolo se añadió en cURL 7.21.7). Si no se especifica ningún protocolo, el proxy se tratará como un proxy HTTP. Si especifica el protocolo incorrecto, la conexión fallará y el item pasará a no ser compatible.<br>De forma predeterminada, se utilizará el puerto 1080.<br>Si se especifica, el proxy sobrescribirá las variables de entorno relacionadas con proxy, como http\_proxy, HTTPS\_PROXY. Si no se especifica, el proxy no sobrescribirá las variables de entorno relacionadas con proxy. El valor introducido se pasa "tal cual", sin realizar comprobaciones de validez.<br>*Note* que con el proxy HTTP solo se admite autenticación simple.<br>Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto establece la opción de cURL [CURLOPT\_PROXY](https://curl.haxx.se/libcurl/c/CURLOPT_PROXY.html).|
|*HTTP authentication*|Seleccione la opción de autenticación:<br>**None** - no se usa autenticación;<br>**Basic** - se usa autenticación básica;<br>**NTLM** - se usa autenticación NTLM ([Windows NT LAN Manager](http://en.wikipedia.org/wiki/NTLM));<br>**Kerberos** - se usa autenticación Kerberos (consulte también: [Configuring Kerberos with Zabbix](/manual/appendix/items/kerberos));<br>**Digest** - se usa autenticación Digest.<br>Esto establece la opción de cURL [CURLOPT\_HTTPAUTH](https://curl.haxx.se/libcurl/c/CURLOPT_HTTPAUTH.html).|
|*User name*|Introduzca el nombre de usuario (hasta 255 caracteres).<br>Este campo está disponible si *HTTP authentication* está configurado como Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel. |
|*Password*|Introduzca la contraseña del usuario (hasta 255 caracteres).<br>Este campo está disponible si *HTTP authentication* está configurado como Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel. |
|*SSL verify peer*|Marque la casilla para verificar el certificado SSL del servidor web. El certificado del servidor se tomará automáticamente de la ubicación de la autoridad de certificación (CA) del sistema. Puede sobrescribir la ubicación de los archivos CA mediante el parámetro de configuración SSLCALocation del server o del proxy de Zabbix.<br>Esto establece la opción de cURL [CURLOPT\_SSL\_VERIFYPEER](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html).|
|*SSL verify host*|Marque la casilla para verificar que coincidan el campo Common Name o el campo Subject Alternate Name del certificado del servidor web.<br>Esto establece la opción de cURL [CURLOPT\_SSL\_VERIFYHOST](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html).|
|*SSL certificate file*|Nombre del archivo de certificado SSL utilizado para la autenticación del cliente. El archivo de certificado debe estar en formato PEM^1^. Si el archivo de certificado también contiene la clave privada, deje vacío el campo SSL key file. Si la clave está cifrada, especifique la contraseña en el campo SSL key password. El directorio que contiene este archivo se especifica mediante el parámetro de configuración SSLCertLocation del server o del proxy de Zabbix.<br>Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto establece la opción de cURL [CURLOPT\_SSLCERT](http://curl.haxx.se/libcurl/c/CURLOPT_SSLCERT.html).|
|*SSL key file*|Nombre del archivo de clave privada SSL utilizado para la autenticación del cliente. El archivo de clave privada debe estar en formato PEM^1^. El directorio que contiene este archivo se especifica mediante el parámetro de configuración SSLKeyLocation del server o del proxy de Zabbix.<br>Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto establece la opción de cURL [CURLOPT\_SSLKEY](http://curl.haxx.se/libcurl/c/CURLOPT_SSLKEY.html).|
|*SSL key password*|Contraseña del archivo de clave privada SSL.<br>Macros compatibles: macros de usuario, macros de descubrimiento de bajo nivel.<br>Esto establece la opción de cURL [CURLOPT\_KEYPASSWD](http://curl.haxx.se/libcurl/c/CURLOPT_KEYPASSWD.html).|
|*Timeout*|Zabbix no dedicará más tiempo del establecido al procesamiento de la URL (1-600 segundos). En realidad, este parámetro define el tiempo máximo para establecer una conexión con la URL y el tiempo máximo para realizar una solicitud HTTP. Por lo tanto, Zabbix no dedicará más de 2 x *Timeout* segundos a una comprobación.<br>Esto establece la opción de cURL [CURLOPT\_TIMEOUT](https://curl.haxx.se/libcurl/c/CURLOPT_TIMEOUT.html).<br>Para obtener más información sobre el parámetro *Timeout*, consulte los [atributos generales del item](/manual/config/items/item#configuration).|
|*Enable trapping*|Con esta casilla marcada, el item también funcionará como un item trapper y aceptará datos enviados al server o proxy de Zabbix mediante la utilidad [Zabbix sender](/manual/concepts/sender) o el [protocolo](/manual/appendix/protocols/zabbix_sender) de Zabbix sender, o aceptará datos enviados al server de Zabbix mediante el método de API [`history.push`](/manual/api/reference/history/push). Para obtener más información sobre el envío de datos, consulte: [Trapper items](/manual/config/items/itemtypes/trapper#sending-data).|
|*Allowed hosts*|Visible solo si la casilla *Enable trapping* está marcada.<br>Lista de direcciones IP separadas por comas, opcionalmente en notación CIDR, o nombres DNS.<br>Si se especifica, las conexiones entrantes solo se aceptarán desde los hosts enumerados aquí.<br>Si la compatibilidad con IPv6 está habilitada, entonces '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' se tratan por igual y '::/0' permitirá cualquier dirección IPv4 o IPv6.<br>'0.0.0.0/0' puede utilizarse para permitir cualquier dirección IPv4.<br>Tenga en cuenta que las "direcciones IPv6 compatibles con IPv4" (prefijo 0000::/96) son compatibles, pero están obsoletas según [RFC4291](https://tools.ietf.org/html/rfc4291#section-2.5.5).<br>Ejemplo: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST}<br>Se permiten espacios y [macros de usuario](/manual/config/macros/user_macros) en este campo.<br>Se permiten macros de host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} en este campo.|

::: notetip
Si el campo *HTTP proxy* se deja vacío, otra forma de usar un proxy HTTP es establecer variables de entorno relacionadas con proxy.

Para HTTP - establezca la variable de entorno `http_proxy` para el usuario del server de Zabbix. Por ejemplo:<br>
`http_proxy=http://proxy_ip:proxy_port`.

Para HTTPS - establezca la variable de entorno `HTTPS_PROXY`. Por ejemplo:<br>
`HTTPS_PROXY=http://proxy_ip:proxy_port`. Hay más detalles disponibles ejecutando un comando de shell: *\# man curl*.
:::

::: noteimportant
 \[1\] Zabbix solo admite archivos de certificado y clave privada
en formato PEM. En caso de que tenga los datos de su certificado y clave
privada en un archivo con formato PKCS \#12 (normalmente con extensión \*.p12 o
\*.pfx), puede generar el archivo PEM a partir de él usando los siguientes
comandos:

    openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
    openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes  -out ssl-cert.key

[comment]: # ({/df1df5d7-11697b04})

[comment]: # ({4c860844-4c860844})
#### Ejemplos

[comment]: # ({/4c860844-4c860844})

[comment]: # ({158d2fe1-67d717da})
##### Ejemplo 1

Envíe solicitudes GET simples para recuperar datos de servicios como
Elasticsearch:

-   Cree un item GET con la URL: `localhost:9200/?pretty`
-   Observe la respuesta:

```json
    {
      "name" : "YQ2VAY-",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
      "version" : {
        "number" : "6.1.3",
        "build_hash" : "af51318",
        "build_date" : "2018-01-26T18:22:55.523Z",
        "build_snapshot" : false,
        "lucene_version" : "7.1.0",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "Ya sabes, para buscar"
    }
```

-   Ahora extraiga el número de versión usando un paso de preprocesamiento JSONPath:
    `$.version.number`

[comment]: # ({/158d2fe1-67d717da})

[comment]: # ({fa9f3600-712fb81c})
##### Ejemplo 2

Envía solicitudes POST simples para recuperar datos de servicios como
Elasticsearch:

-   Crea un item POST con la URL:
    `http://localhost:9200/str/values/_search?scroll=10s`
-   Configura el siguiente cuerpo POST para obtener la carga del procesador (promedio de 1 min por núcleo)

```json
    {
        "query": {
            "bool": {
                "must": [{
                    "match": {
                        "itemid": 28275
                    }
                }],
                "filter": [{
                    "range": {
                        "clock": {
                            "gt": 1517565836,
                            "lte": 1517566137
                        }
                    }
                }]
            }
        }
    }
```

-   Recibido:

```json
    {
        "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
        "took": 18,
        "timed_out": false,
        "_shards": {
            "total": 5,
            "successful": 5,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": 1,
            "max_score": 1.0,
            "hits": [{
                "_index": "dbl",
                "_type": "values",
                "_id": "dqX9VWEBV6sEKSMyk6sw",
                "_score": 1.0,
                "_source": {
                    "itemid": 28275,
                    "value": "0.138750",
                    "clock": 1517566136,
                    "ns": 25388713,
                    "ttl": 604800
                }
            }]
        }
    }
```

-   Ahora usa un paso de preprocesamiento JSONPath para obtener el valor del item:
    `$.hits.hits[0]._source.value`

[comment]: # ({/fa9f3600-712fb81c})

[comment]: # ({9538274c-f480040f})
##### Ejemplo 3

Comprobación de si la API de Zabbix está activa, usando
[apiinfo.version](/manual/api/reference/apiinfo/version).

-   Configuración del item:

![](../../../../../assets/en/manual/config/items/itemtypes/example3_a.png){width="600"}

Observe el uso del método POST con datos JSON, estableciendo encabezados de solicitud
y solicitando que se devuelvan solo los encabezados:

-   Preprocesamiento del valor del item con una expresión regular para obtener el código HTTP:

![](../../../../../assets/en/manual/config/items/itemtypes/example3_b.png)

-   Comprobación del resultado en *Latest data*:

![](../../../../../assets/en/manual/config/items/itemtypes/example3_c.png){width="600"}

[comment]: # ({/9538274c-f480040f})

[comment]: # ({ec243a91-466eee2b})
##### Ejemplo 4

Obtención de información meteorológica mediante la conexión al servicio público de Openweathermap.

-   Configure un item maestro para la recopilación masiva de datos en un único JSON:

![](../../../../../assets/en/manual/config/items/itemtypes/example4_a.png){width="600"}

Observe el uso de macros en los campos de consulta. Consulte la [API de Openweathermap](https://openweathermap.org/current) para saber cómo completarlos.

Ejemplo de JSON devuelto en la respuesta al HTTP agent:

```json
{
    "body": {
        "coord": {
            "lon": 40.01,
            "lat": 56.11
        },
        "weather": [{
            "id": 801,
            "main": "Clouds",
            "description": "few clouds",
            "icon": "02n"
        }],
        "base": "stations",
        "main": {
            "temp": 15.14,
            "pressure": 1012.6,
            "humidity": 66,
            "temp_min": 15.14,
            "temp_max": 15.14,
            "sea_level": 1030.91,
            "grnd_level": 1012.6
        },
        "wind": {
            "speed": 1.86,
            "deg": 246.001
        },
        "clouds": {
            "all": 20
        },
        "dt": 1526509427,
        "sys": {
            "message": 0.0035,
            "country": "RU",
            "sunrise": 1526432608,
            "sunset": 1526491828
        },
        "id": 487837,
        "name": "Stavrovo",
        "cod": 200
    }
}
```

La siguiente tarea es configurar items dependientes que extraigan datos del JSON.

-   Configure un item dependiente de ejemplo para la humedad:

![](../../../../../assets/en/manual/config/items/itemtypes/example4_b.png)

Otros métricos meteorológicos, como 'Temperature', se añaden de la misma manera.

-   Ejemplo de preprocesamiento del valor de un item dependiente con JSONPath:

![](../../../../../assets/en/manual/config/items/itemtypes/example4_c.png)

-   Compruebe el resultado de los datos meteorológicos en *Latest data*:

![](../../../../../assets/en/manual/config/items/itemtypes/example4_d.png){width="600"}

[comment]: # ({/ec243a91-466eee2b})

[comment]: # ({530cea3c-44596b14})
##### Ejemplo 5

Conexión a la página de estado de Nginx y obtención de sus métricas en bloque.

-   Configure Nginx siguiendo la [guía oficial](https://nginx.ru/en/docs/http/ngx_http_stub_status_module.html).
-   Configure un item maestro para la recopilación de datos en bloque:

![](../../../../../assets/en/manual/config/items/itemtypes/example5_a.png){width="600"}

Salida de ejemplo de stub status de Nginx:

    Active connections: 1 Active connections:
    server accepts handled requests
     52 52 52 
    Reading: 0 Writing: 1 Waiting: 0

La siguiente tarea es configurar items dependientes que extraigan los datos.

-   Configure un item dependiente de ejemplo para solicitudes por segundo:

![](../../../../../assets/en/manual/config/items/itemtypes/example5_b.png)

-   Preprocesamiento de valor de un item dependiente de ejemplo con la expresión regular
    `server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)`:

![](../../../../../assets/en/manual/config/items/itemtypes/example5_c.png){width="600"}

-   Compruebe el resultado completo del módulo stub en *Latest data*:

![](../../../../../assets/en/manual/config/items/itemtypes/example5_d.png){width="600"}

[comment]: # ({/530cea3c-44596b14})
