

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HTTP リクエスト
<a name="monetization-functions-types-http-request"></a>

## どのようなときに使うか
<a name="monetization-functions-types-http-request-when"></a>

関数`HTTP_REQUEST`が外部サービスを呼び出す必要がある場合に使用します。一般的なユースケースには、解決プロバイダーからの ID データの取得、データ管理プラットフォームからの対象者セグメントの取得、ログ記録エンドポイントへのセッション情報の送信などがあります。

## 設定フィールド
<a name="monetization-functions-types-http-request-fields"></a>

`HTTP_REQUEST` 関数には次のフィールドがあります。
+ **ランタイム** — 式言語。これを に設定します`JSONATA`。
+ **MethodType** — HTTP メソッド。サポートされている値は `GET` および `POST` です。
+ **URL** — リクエストを送信する URL。静的 URL または URL を動的に構築する JSONata 式を使用できます。
+ **ヘッダー** — リクエストに含める HTTP ヘッダー。ヘッダー名と値のペアとして指定されます。動的ヘッダー値には`{%...%}`式構文を使用します。静的な値は文字列として直接指定できます。
+ **本文** — 送信するリクエスト本文。`POST` リクエストで使用されます。JSONata 式を使用して、本文を動的に構築できます。
+ **RequestTimeoutMilliseconds** (必須) — レスポンスを待機する時間。
+ **出力** — HTTP 呼び出しの完了後に生成する値を定義します。各エントリは、`response`オブジェクトを参照できる式に出力キー ( など`player_params.envelope_id`) をマッピングします。

これらのフィールドに適用されるサイズ制限と制限については、「」を参照してください[制限](monetization-functions-limits.md)。

## リクエストの処理方法
<a name="monetization-functions-types-http-request-phases"></a>

MediaTailor は、2 つのステップで`HTTP_REQUEST`関数を処理します。

1. **リクエストを構築する** — MediaTailor は`Url`、、`Headers`、および `Body`式を現在のセッション状態に対して評価します。これらの評価された値は、アウトバウンド HTTP リクエストを形成します。

1. **レスポンスの処理** — HTTP 呼び出しが完了すると、MediaTailor は出力ブロック内の式を評価します。これらの式は、元のセッション状態と呼び出しによって返される`response`オブジェクトの両方を参照できます。

## レスポンスフィールド
<a name="monetization-functions-types-http-request-response"></a>

HTTP 呼び出しが完了したら、出力式で次のフィールドを参照できます。


| フィールド | タイプ | 説明 | 
| --- | --- | --- | 
| response.body | オブジェクトまたは配列 | JSON として解析されたレスポンス本文。本文nullが 20,000 文字を超える場合、または有効な JSON でない場合は、 に設定します。 | 
| response.statusCode | 整数 | 外部サービスによって返される HTTP ステータスコード。ネットワーク障害null時に を に設定します。 | 
| response.text | String | 20,000 文字に切り捨てられた文字列としての raw レスポンス本文。ネットワーク障害"Internal Error"時に を に設定します。 | 

**重要**  
`response.body` フィールドは`null`、レスポンスが有効な JSON であっても、レスポンスが 20,000 文字を超える場合です。

**注記**  
レスポンスオブジェクトは、 `HTTP_REQUEST`関数の出力ブロックでのみ使用できます。URL、ヘッダー、または本文フィールドでレスポンスフィールドを参照することはできません。では`SEQUENTIAL_EXECUTOR`、各`HTTP_REQUEST`関数は独自のレスポンスにのみアクセスできます。

値 は、データが使用できない`null`ことを意味します。これは、HTTP 呼び出しが失敗した場合 (ネットワークエラーまたはタイムアウト）、またはレスポンス本文が 20,000 文字を超えているか、有効な JSON でない場合に発生します。

## ネットワーク障害の動作
<a name="monetization-functions-types-http-request-failure"></a>

ネットワークエラーまたはタイムアウトが原因で HTTP 呼び出しが失敗`response.statusCode`し、 `response.body` が に設定され`null`、 `response.text`が に設定されている場合`"Internal Error"`。Output 式は引き続き実行されるため、レスポンスデータを使用する`response.statusCode`前に必ず確認してください。

**ヒント**  
条件式を使用して、障害を適切に処理します。 `{%response.statusCode = 200 ? response.body.value : 'default'%}`

## 例: ID データの取得
<a name="monetization-functions-types-http-request-example"></a>

次の関数は、セッションの開始時に ID 解決 API を呼び出し、その結果をプレイヤーパラメータに保存します。`PRE_SESSION_INITIALIZATION` ライフサイクルフック用に設計されています。

```
{
    "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 : ''%}"
        }
    }
}
```

同様の例の完全なチュートリアルについては、「」を参照してください[関数の例](monetization-functions-examples.md)。