Version:

HTTPRequestor Gem

HTTPRequestor Gem提供通过用户提供的回调函数发出异步 HTTP/HTTPS 请求和返回数据的功能。

注意:
虽然此功能目前仅在 Windows 上受支持,但可以扩展到其他平台。

开始

要使用 HttpRequestor Gem,必须在项目中启用它。有关更多信息,请参阅 在项目中添加和删除 Gem.

HttpRequestor Gem使用 AWS C++ 开发工具包。要获取这些依赖项,请将以下内容添加到项目的 CMake 文件中:

BUILD_DEPENDENCIES
        PRIVATE
            ...
            Gem::HttpRequestor
            3rdParty::AWSNativeSDK::Core

在 Gem 上创建依赖项

如果您需要确保在组件中使用 HttpRequestor Gem 之前已启用它,请在组件的GetRequiredServices方法中添加要求。例如:

void AutomatedTestingSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
{
   ...
   required.push_back(AZ_CRC_CE("HttpRequestorService"));
}

关闭 Amazon EC2 实例元数据服务调用

HttpRequestor Gem 使用 AWS C++ SDK 来提供 Http(s) 客户端。您无需提供 AWS 凭证或账户信息即可使用此 Gem。

除非您的项目在 Amazon EC2 计算上运行,否则建议您通过将 AWS_EC2_METADATA_DISABLED 环境变量设置为“true”来关闭 Amazon EC2 实例元数据服务 (IMDS) 查询。 设置此环境变量将防止 SDK 资源不必要地尝试联系 Amazon EC2 IMDS 以获取配置、区域和凭证信息,这可能会导致延迟和网络资源浪费。

set AWS_EC2_METADATA_DISABLED=true

C++ API

注意:
此内容正在移至 API 参考 .

HttpRequestor Gem 有两组 API:一组用于发出返回 JSON 响应的请求,另一组用于返回字符串(文本)响应。

AddRequest, AddRequestWithHeaders, AddRequestWithHeadersAndBody

使用AddRequest, AddRequestWithHeaders, 和 AddRequestWithHeadersAndBody向任何网站发送通用 HTTP 请求并以 JSON 格式接收返回数据的 API。这些方法返回在 callback 参数中接收的数据。

Syntax

HttpRequestor::HttpRequestorRequestBus::Broadcast(&HttpRequestor::HttpRequestorRequests::AddRequest, URI, method, callback)
HttpRequestor::HttpRequestorRequestBus::Broadcast(&HttpRequestor::HttpRequestorRequests::AddRequestWithHeaders, URI, method, headers, callback)
HttpRequestor::HttpRequestorRequestBus::Broadcast(&HttpRequestor::HttpRequestorRequests::AddRequestWithHeadersAndBody, URI, method, headers, body, callback)

每个添加请求方法都需要 URI、方法和回调。

参数

参数类型描述
URIAZStd::String完全限定的 Web 地址,格式如下: scheme:[//[user:password@]host[:port]][/]path[?query][#fragment].
methodAws::Http::HttpMethod方法类型。支持以下值: HTTP_GET, HTTP_POST, HTTP_DELETE, HTTP_PUT, HTTP_HEAD, and HTTP_PATCH.
callbacksee below当 HTTP 请求完成时,将调用此函数。响应正文和代码存在于回调中。
headersHttpRequestor::HeadersHTTP 请求的标头字段列表。
bodyAZStd::String与请求一起发送的可选正文。

Return:无返回值。

JSON 请求回调

该回调针对 AddRequest, AddRequestWithHeaders, 和 AddRequestWithHeadersAndBody 等方法返回。

void Callback(const Aws::Utils::Json::JsonValue& json, Aws::Http::HttpResponseCode responseCode);

参数

参数类型描述
jsonAws::Utils::Json::JsonValueJSON 对象。此对象的生命周期仅在回调范围内有效。
responseCodeAws::Http::HttpResponseCodeHTTP 响应代码。

Returns

void

AddTextRequest, AddTextRequestWithHeaders, AddTextRequestWithHeadersAndBody

使用AddTextRequest, AddTextRequestWithHeaders, 和 AddTextRequestWithHeadersAndBodyAPI 向任何网站发送通用 HTTP 请求,并以文本字符串形式接收返回的数据。 这些方法返回在 callback 参数中接收的数据。

Syntax

HttpRequestor::HttpRequestorRequestBus::Broadcast(&HttpRequestor::HttpRequestorRequests::AddTextRequest, URI, method, callback)
HttpRequestor::HttpRequestorRequestBus::Broadcast(&HttpRequestor::HttpRequestorRequests::AddTextRequestWithHeaders, URI, method, headers, callback)
HttpRequestor::HttpRequestorRequestBus::Broadcast(&HttpRequestor::HttpRequestorRequests::AddTextRequestWithHeadersAndBody, URI, method, headers, body, callback)

每个添加文本请求方法都需要 URI、方法和回调。

参数

参数类型描述
URIAZStd::String完全限定的 Web 地址,格式如下: scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]
methodAws::Http::HttpMethod方法类型。支持以下值: HTTP_GET, HTTP_POST, HTTP_DELETE, HTTP_PUT, HTTP_HEAD, 和 HTTP_PATCH.
callbacksee below当 HTTP 请求完成时,将调用此函数。响应正文和代码存在于回调中。
headersHttpRequestor::HeadersHTTP 请求的标头字段列表。
bodyAZStd::String与请求一起发送的可选正文。

Returns

void

Text Request Callback

该回调针对 AddTextRequest, AddTextRequestWithHeadersAddTextRequestWithHeadersAndBody 方法返回。

void Callback(const AZStd::string& response, Aws::Http::HttpResponseCode responseCode);

参数

参数类型描述
responseAZStd::string&从服务器返回的文本。此对象的生命周期仅在回调范围内有效。
responseCodeAws::Http::HttpResponseCodeHTTP 响应代码。

Returns

void

以下示例显示了调用 HttpBin 以获取源 IP 地址:

#include <aws/core/http/HttpResponse.h>
#include <HttpRequestor/HttpRequestorBus.h>
#include <HttpRequestor/HttpTypes.h>

...

HttpRequestor::HttpRequestorRequestBus::Broadcast(
    &HttpRequestor::HttpRequestorRequests::AddRequest, "https://httpbin.org/ip", Aws::Http::HttpMethod::HTTP_GET,
    [](const Aws::Utils::Json::JsonView& data, Aws::Http::HttpResponseCode responseCode)
    {
        if (responseCode == Aws::Http::HttpResponseCode::OK)
        {
            AZ_Printf("HttpRequestExample",  "Call succeed with %s %d", data.WriteCompact().c_str(), responseCode);
        }
        else
        {
            AZ_Printf("HttpRequestExample", "Request Failed!");
        }
    });