自定义 HTTP 客户端 - 适用于 Go 的 AWS SDK v2

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

自定义 HTTP 客户端

适用于 Go 的 AWS SDK 使用带有默认配置值的默认 HTTP 客户端。尽管您可以更改其中的一些配置值,但是对于在高吞吐量和低延迟要求的环境 适用于 Go 的 AWS SDK 中使用的客户,默认的 HTTP 客户端和传输配置不足。有关更多信息,请参阅,常见问题因为配置建议因特定工作负载而异。本节介绍如何配置自定义 HTTP 客户端,以及如何使用该客户端创建 适用于 Go 的 AWS SDK 呼叫。

为了帮助您创建自定义 HTTP 客户端,本节介绍NewBuildableClient如何配置自定义设置以及如何将该客户端与 适用于 Go 的 AWS SDK 服务客户端一起使用。

让我们来定义我们要自定义的内容。

在配置加载期间重写

调用LoadDefaultConfig时可以通过使用 With 包装客户端HTTPClient并将结果值传递给,从而提供自定义 HTTP 客户端LoadDefaultConfig例如,要以我们的客户customClient身份通过:

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithHTTPClient(customClient))

超时

BuildableHTTPClient可以配置请求超时限制。此超时包括连接、处理任何重定向和读取完整响应正文的时间。例如,要修改客户端超时,请执行以下操作:

import "github.com/aws/aws-sdk-go-v2/aws/transport/http" // ... httpClient := http.NewBuildableClient().WithTimeout(time.Second*5)

拨号器

BuildableHTTPClient提供了一种生成器机制,用于使用修改后的拨号器选项来构造客户端。以下示例说明如何配置客户端Dialer设置。

import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net" // ... httpClient := awshttp.NewBuildableClient().WithDialerOptions(func(d *net.Dialer) { d.KeepAlive = -1 d.Timeout = time.Millisecond*500 })

设置

拨号器。 KeepAlive

此设置表示活动网络连接的保持活动时间。

设置为负值可禁用 keep-alives。

如果协议和操作系统支持,则设置为 0 以启用 keep-alive。

不支持 keep-alive 的网络协议或操作系统会忽略此字段。默认情况下,TCP 启用保持活动状态。

https://golang。 org/pkg/net/#Dialer。 KeepAlive

设置KeepAlive时间。持续时间。

拨号器. 超时

此设置表示拨号等待创建连接的最长时间。

默认值为 30 秒。

https://golang。 org/pkg/net/#Dialer .Timeout

设置Timeout时间。持续时间。

传输

BuildableHTTPClient提供了构建器机制,用于使用修改后的传输选项来构造客户端。

配置代理

如果您无法直接连接到互联网,则可以使用 Go 支持的环境变量 (HTTP_PROXY/HTTPS_PROXY) 或创建自定义 HTTP 客户端来配置代理。以下示例将客户端配置为PROXY_URL用作代理端点:

import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { proxyURL, err := url.Parse("PROXY_URL") if err != nil { log.Fatal(err) } tr.Proxy = http.ProxyURL(proxyURL) })

其他设置

以下是一些其他Transport设置,可以对其进行修改以调整 HTTP 客户端。此处未描述的任何其他设置都可以在传输类型文档中找到。可以应用这些设置,如以下示例所示:

import awshttp "github.com/aws/aws-sdk-go-v2/aws/transport/http" import "net/http" // ... httpClient := awshttp.NewBuildableClient().WithTransportOptions(func(tr *http.Transport) { tr.ExpectContinueTimeout = 0 tr.MaxIdleConns = 10 })

运输。 ExpectContinueTimeout

如果请求有 “Expect:100-continue” 标头,则此设置表示在完全写入请求标头后等待服务器第一个响应标头的最长时间,此时间不包括发送请求标头的时间。超时结束后,HTTP 客户端会发送其有效负载。

默认为 1 秒。

设置为 0 表示没有超时,无需等待即可发送请求有效负载。一个用例是,当代理或第三方服务遇到问题时,这些服务的会话类似于在稍后显示的函数中使用 Amazon S3。

https://golang。 org/pkg/net/http/#Transport。 ExpectContinueTimeout

设置ExpectContinue时间。持续时间。

运输。 IdleConnTimeout

此设置表示在 HTTP 请求之间保持空闲网络连接的最长时间。

设置为 0 表示没有限制。

https://golang。 org/pkg/net/http/#Transport。 IdleConnTimeout

设置IdleConnTimeout时间。持续时间。

运输。 MaxIdleConns

此设置表示所有主机上空闲(保持活动状态)连接的最大数量。增加此值的一个用例是,当您在短时间内看到来自相同客户端的许多连接时

0 表示没有限制。

https://golang。 org/pkg/net/http/#Transport。 MaxIdleConns

设置MaxIdleConnsint

运输。 MaxIdleConnsPerHost

此设置表示每台主机要保留的最大空闲(保持活动状态)连接数。增加此值的一个用例是,当您在短时间内看到来自相同客户端的许多连接时

默认为每台主机有两个空闲连接。

设置为 0 即可使用 DefaultMaxIdleConnsPerHost (2)。

https://golang。 org/pkg/net/http/#Transport。 MaxIdleConnsPerHost

设置MaxIdleConnsPerHostint

运输。 ResponseHeaderTimeout

此设置表示等待客户端读取响应标头的最长时间。

如果客户端无法在这段时间内读取响应的标头,则请求会因超时错误而失败。

使用长时间运行的 Lambda 函数时请谨慎设置此值,因为在 Lambda 函数完成或超时之前,该操作不会返回任何响应标头。但是,您仍然可以在** InvokeAsync ** API 操作中使用此选项。

默认为没有超时;永远等待。

https://golang。 org/pkg/net/http/#Transport。 ResponseHeaderTimeout

设置ResponseHeaderTimeout时间。持续时间。

运输。 TLSHandshake超时

此设置表示等待 TLS 握手完成的最长时间。

默认为 10 秒。

零表示没有超时。

https://golang。 org/pkg/net/http/#Transport。 TLSHandshake超时

设置TLSHandshakeTimeout时间。持续时间。