

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Richiesta HTTP
<a name="monetization-functions-types-http-request"></a>

## Quando utilizzarlo
<a name="monetization-functions-types-http-request-when"></a>

Da utilizzare `HTTP_REQUEST` quando la funzione deve chiamare un servizio esterno. I casi d'uso più comuni includono il recupero dei dati di identità da un fornitore di soluzioni, il recupero di segmenti di pubblico da una piattaforma di gestione dei dati e l'invio di informazioni sulla sessione a un endpoint di registrazione.

## Campi di configurazione
<a name="monetization-functions-types-http-request-fields"></a>

Una `HTTP_REQUEST` funzione ha i seguenti campi:
+ **Runtime**: il linguaggio delle espressioni. Impostalo su`JSONATA`.
+ **MethodType**— Il metodo HTTP. I valori supportati sono `GET` e `POST`.
+ **Url**: l'URL a cui inviare la richiesta. È possibile utilizzare un URL statico o un'espressione JSonata che crea l'URL in modo dinamico.
+ **Intestazioni**: le intestazioni HTTP da includere nella richiesta, specificate come coppie di nome e valore dell'intestazione. Usa la sintassi delle `{%...%}` espressioni per i valori di intestazione dinamici. I valori statici possono essere specificati direttamente come stringhe.
+ **Corpo**: il corpo della richiesta da inviare. Utilizzato con `POST` le richieste. È possibile utilizzare un'espressione JSonata per creare il corpo in modo dinamico.
+ **RequestTimeoutMilliseconds**(obbligatorio) — Quanto tempo aspettare per una risposta.
+ **Output**: definisce i valori da produrre dopo il completamento della chiamata HTTP. Ogni voce associa una chiave di output (ad esempio`player_params.envelope_id`) a un'espressione che può fare riferimento all'`response`oggetto.

Per i limiti e le restrizioni di dimensione applicabili a questi campi, consulta[Limits](monetization-functions-limits.md).

## Come viene elaborata la richiesta
<a name="monetization-functions-types-http-request-phases"></a>

MediaTailor elabora una `HTTP_REQUEST` funzione in due fasi:

1. **Crea la richiesta**: MediaTailor valuta le `Body` espressioni `Url``Headers`, e rispetto allo stato corrente della sessione. Questi valori valutati costituiscono la richiesta HTTP in uscita.

1. **Elabora la risposta**: al termine della chiamata HTTP, MediaTailor valuta le espressioni nel blocco di output. Queste espressioni possono fare riferimento sia allo stato della sessione originale che all'`response`oggetto restituito dalla chiamata.

## Campi di risposta
<a name="monetization-functions-types-http-request-response"></a>

Al termine della chiamata HTTP, puoi fare riferimento ai seguenti campi nelle tue espressioni di output:


| Campo | Tipo | Description | 
| --- | --- | --- | 
| response.body | Oggetto o matrice | Il corpo della risposta analizzato come JSON. Impostato su null se il corpo supera i 20.000 caratteri o non è un JSON valido. | 
| response.statusCode | Numero intero | Il codice di stato HTTP restituito dal servizio esterno. Impostato null su in caso di errore di rete. | 
| response.text | Stringa | Il corpo della risposta non elaborato come stringa, troncato a 20.000 caratteri. Impostato su un errore di rete. "Internal Error" | 

**Importante**  
Il `response.body` campo è `null` quando la risposta supera i 20.000 caratteri, anche se la risposta è un JSON valido.

**Nota**  
L'oggetto risposta è disponibile solo nel blocco Output di una funzione. `HTTP_REQUEST` Non è possibile fare riferimento ai campi di risposta nei campi Url, Headers o Body. In a`SEQUENTIAL_EXECUTOR`, ogni `HTTP_REQUEST` funzione può accedere solo alla propria risposta.

Un valore di `null` indica che i dati non sono disponibili. Ciò si verifica quando la chiamata HTTP fallisce (errore di rete o timeout) o quando il corpo della risposta supera i 20.000 caratteri o non è un JSON valido.

## Comportamento di errore di rete
<a name="monetization-functions-types-http-request-failure"></a>

Se la chiamata HTTP non riesce a causa di un errore di rete o di un timeout `response.statusCode` e `response.body` sono impostate su e `response.text` sono impostate su. `null` `"Internal Error"` Le espressioni di output sono ancora in esecuzione, quindi controllate sempre `response.statusCode` prima di utilizzare i dati di risposta.

**Suggerimento**  
Usa un'espressione condizionale per gestire gli errori con garbo: `{%response.statusCode = 200 ? response.body.value : 'default'%}`

## Esempio: recupero dei dati di identità
<a name="monetization-functions-types-http-request-example"></a>

La seguente funzione chiama un'API per la risoluzione delle identità all'inizio della sessione e memorizza il risultato nei parametri del giocatore. È progettato per il `PRE_SESSION_INITIALIZATION` ciclo di vita.

```
{
    "FunctionId": "fetchIdentityEnvelope",
    "FunctionType": "HTTP_REQUEST",
    "HttpRequestConfiguration": {
        "Runtime": "JSONATA",
        "MethodType": "GET",
        "Url": "{%'https://identity.example.com/v1/resolve?ip=' & $encodeUrlComponent(session.client_ip)%}",
        "Headers": {
            "Authorization": "{%'Bearer my_api_token'%}",
            "Accept": "application/json"
        },
        "RequestTimeoutMilliseconds": 2000,
        "Output": {
            "player_params.identity_envelope": "{%response.statusCode = 200 ? response.body.envelope : ''%}"
        }
    }
}
```

Per una panoramica completa di un esempio simile, vedi. [Esempi di funzioni](monetization-functions-examples.md)