View a markdown version of this page

HTTP_REQUEST - AWS Elemental MediaTailor

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

HTTP_REQUEST

何时使用

HTTP_REQUEST当您的函数需要调用外部服务时使用。常见用例包括从解析提供商那里获取身份数据、从数据管理平台检索受众细分以及向日志端点发送会话信息。

配置字段

一个HTTP_REQUEST函数有以下字段:

  • 运行时间-表达式语言。将其设置为JSONATA

  • MethodType— HTTP 方法。支持的值为 GETPOST

  • 网址-要将请求发送到的网址。您可以使用静态 URL 或 jsonata 表达式来动态构建 URL。

  • 标头-请求中包含的 HTTP 标头,指定为标头名称和值对。对动态标头值使用{%...%}表达式语法。静态值可以直接指定为字符串。

  • 正文-要发送的请求正文。与POST请求一起使用。你可以使用 jsonata 表达式来动态构建主体。

  • RequestTimeoutMilliseconds(必填)-等待回复的时间。

  • 输出-定义 HTTP 调用完成后要生成的值。每个条目都将输出键(例如player_params.envelope_id)映射到可以引用该response对象的表达式。

有关适用于这些字段的大小限制和限制,请参阅限制

请求是如何处理的

MediaTailor 分两个步骤处理一个HTTP_REQUEST函数:

  1. 生成请求 — 根据当前 MediaTailor 会话状态评估UrlHeaders、和Body表达式。这些评估值构成出站 HTTP 请求。

  2. 处理响应-HTTP 调用完成后, MediaTailor 计算输出块中的表达式。这些表达式既可以引用原始会话状态,也可以引用调用返回的response对象。

响应字段

HTTP 调用完成后,您可以在输出表达式中引用以下字段:

字段 Type 说明
response.body 对象或数组 响应正文解析为 JSON。null如果正文超过 20,000 个字符或者不是有效的 JSON,则设置为。
response.statusCode 整数 外部服务返回的 HTTP 状态码。设置为 null “网络故障时”。
response.text 字符串 原始响应正文为字符串,截断为 20,000 个字符。设置为 "Internal Error" “网络故障时”。
重要

response.body字段表示响应超过 20,000 个字符,即使响应是有效的 JSON 也是如此。null

注意

响应对象仅在HTTP_REQUEST函数的 Output 块中可用。您不能在 “网址”、“标题” 或 “正文” 字段中引用响应字段。在 a 中SEQUENTIAL_EXECUTOR,每个HTTP_REQUEST函数只能访问自己的响应。

值为null表示数据不可用。当 HTTP 调用失败(网络错误或超时)或响应正文超过 20,000 个字符或不是有效的 JSON 时,就会发生这种情况。

网络故障行为

如果 HTTP 调用由于网络错误或超时而失败nullresponse.statusCoderesponse.body且设置为,response.text则设置为"Internal Error"。您的输出表达式仍在运行,因此请务必response.statusCode在使用响应数据之前进行检查。

提示

使用条件表达式优雅地处理故障:{%response.statusCode = 200 ? response.body.value : 'default'%}

示例:获取身份数据

以下函数在会话开始时调用身份解析 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 : ''%}" } } }

有关类似示例的完整演练,请参阅函数示例