

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

# 适用于 PHP 的 AWS SDK 版本 3 的客户端构造器选项
<a name="guide_configuration"></a>

客户端构造函数选项可在客户端构造函数中提供，也可以提供给 [https://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.Sdk.html](https://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.Sdk.html) 类。为特定类型客户端提供的选项数组会因您创建的客户端而异。每个客户端的 [API 文档](https://docs.aws.amazon.com/aws-sdk-php/latest/)中都介绍了这些自定义客户端配置选项。

如果您没有明确提供客户端所需的客户端构造器选项，则 SDK for PHP 会从环境变量或 AWS 配置文件中查找值。所有客户端都需要一个凭证提供程序值和一个 AWS 区域 值，因此您必须将这些值设置为构造函数选项或在外部设置。

默认情况下，所检查的配置文件是位于主目录中的 `.aws/config`，通常为 `~/.aws/config`。但是，您可以使用环境变量 `AWS_CONFIG_FILE` 来设置默认配置文件所在的位置。例如，如果您使用 `open_basedir` 来限制对特定目录的文件访问，这可能特别有用。

有关共享 AWS `config`文件和`credentials`文件的位置和格式的更多信息，请参阅《*AWS SDKs 和工具参考指南*》中的[配置](https://docs.aws.amazon.com/sdkref/latest/guide/creds-config-files.html)。

有关可以在配置文件中设置或作为环境变量设置的所有全局 AWS 配置设置的详细信息，请参阅《[和工具参考指南》中的配置AWS SDKs 和身份验证设置](https://docs.aws.amazon.com/sdkref/latest/guide/settings-reference.html)*参考*。

**Topics**
+ [api\$1provider](#api-provider)
+ [凭证](#config_credentials)
+ [debug](#debug)
+ [stats](#config-stats)
+ [端点](#endpoint)
+ [endpoint\$1provider](#endpoint-provider)
+ [endpoint\$1discovery](#endpoint-discovery)
+ [handler](#handler)
+ [http](#config-http)
+ [http\$1handler](#http-handler)
+ [配置文件](#profile)
+ [region](#cfg-region)
+ [重试](#config-retries)
+ [scheme](#scheme)
+ [服务](#service)
+ [signature\$1provider](#signature-provider)
+ [signature\$1version](#signature-version)
+ [ua\$1append](#ua-append)
+ [use\$1aws\$1shared\$1config\$1files](#use-aws-shared-config-files)
+ [验证](#validate)
+ [版本](#cfg-version)

以下示例展示了如何将选项传入 Amazon S3 客户端构造函数。

```
use Aws\S3\S3Client;

$options = [
    'region'            => 'us-west-2',
    'version'           => '2006-03-01',
    'signature_version' => 'v4'
];

$s3Client = new S3Client($options);
```

有关构造客户端的更多信息，请参阅[创建基本服务客户端](making-service-requests.md#creating-a-client)。

## api\$1provider
<a name="api-provider"></a>

Type  
 `callable` 

可调用的 PHP，接受类型、服务和版本参数，并返回一组相应的配置数据。类型值可为 `api`、`waiter` 或 `paginator` 之一。

默认情况下，开发工具包使用可从开发工具包的 `Aws\Api\FileSystemApiProvider` 文件夹加载 API 文件的 `src/data` 实例。

## 凭证
<a name="config_credentials"></a>

Type  
 `array|Aws\CacheInterface|Aws\Credentials\CredentialsInterface|bool|callable` 

传递 `Aws\Credentials\CredentialsInterface` 对象以使用特定凭证实例。以下内容指定应使用 IAM Identity Center 凭证提供程序。此提供程序也称为 SSO 凭证提供程序。

```
$credentials = Aws\Credentials\CredentialProvider::sso('profile default');

$s3 = new Aws\S3\S3Client([
    'region'      => 'us-west-2',
    'credentials' => $credentials
]);
```

如果使用命名配置文件，请在上一个示例中用配置文件名称来替换“`default`”。要了解有关设置命名配置文件的更多信息，请参阅[`config`和*工具参考指南中的共享AWS SDKs 和`credentials`*文件](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html)。

如果没有指定待使用的凭证提供程序，而是依赖凭证提供程序链，则由于身份验证失败而产生的错误消息通常是通用的。其由正在检查有效凭证的源列表中的最后一个提供程序生成，该提供程序可能不是您尝试使用的提供程序。当您指定要使用哪个凭证提供程序时，任何由此产生的错误消息都更加有用和相关，因为其仅来自该提供程序。要详细了解已检查凭证的来源链，请参阅*AWS SDKs 和工具参考指南*中的[凭证提供者链](https://docs.aws.amazon.com/sdkref/latest/guide/standardized-credentials.html#credentialProviderChain)。

传递 `false` 以使用空凭证并且不对请求签名。

```
$s3 = new Aws\S3\S3Client([
    'region'      => 'us-west-2',
    'credentials' => false
]);
```

传递可调用的[凭证提供程序](guide_credentials.md#cred-provider-defn-php)函数，以使用函数创建凭证。

```
use Aws\Credentials\CredentialProvider;

// Only load credentials from environment variables
$provider = CredentialProvider::env();

$s3 = new Aws\S3\S3Client([
    'region'      => 'us-west-2',
    'credentials' => $provider
]);
```

将缓存的凭证传递到 `Aws\CacheInterface` 的实例，以缓存跨多个流程的默认提供程序链返回的值。

```
use Aws\Credentials\CredentialProvider;
use Aws\PsrCacheAdapter;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;


$cache = new PsrCacheAdapter(new FilesystemAdapter);
$provider = CredentialProvider::defaultProvider();
$cachedProvider = CredentialProvider::cache($provider, $cache);

$s3 = new Aws\S3\S3Client([
    'region' => 'us-west-2',
    'credentials' => $cachedProvider
]);
```

您可以在[适用于 PHP 的 AWS SDK 版本 3 的凭据指南中找到有关向客户提供凭证的](guide_credentials.md)更多信息。

**注意**  
加载凭证并在使用时延时验证。

## debug
<a name="debug"></a>

Type  
 `bool|array` 

输出有关每次传输的调试信息。调试信息包含在准备和通过线路发送事务时事务的每个状态变更的信息。调试输出中还包括有关客户端所使用的特定 HTTP 处理程序的信息（例如，调试 cURL 输出）。

设置为 `true` 以便在发送请求时显示调试信息。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'debug'   => true
]);

// Perform an operation to see the debug output
$s3->listBuckets();
```

您也可以提供包含以下键的关联数组。

**logfn（可调用)**  
通过日志消息调用的函数。默认情况下，会使用 PHP 的 `echo` 函数。

**stream\$1size (int)**  
当流的大小大于此数字时，将不记录流数据。设置为 `0`，以不记录任何流数据。

**scrub\$1auth (bool)**  
设置`false`为可禁用从记录的消息中清理身份验证数据（这意味着您的 AWS 访问密钥 ID 和签名将传递到）。`logfn`

**http (bool)**  
设置为 `false`，以禁用低级 HTTP 处理程序的“调试”功能（如完整 cURL 输出）。

**auth\$1headers（数组）**  
设置为您要替换的标头映射到要将标头替换为的值的键/值映射。除非将 `scrub_auth` 设置为 `true`，否则不会使用这些值。

**auth\$1strings（数组）**  
设置为要映射到替代项的正则表达式的键/值映射。如果将 `scrub_auth` 设置为 `true`，身份验证数据清除器将使用这些值。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'debug'   => [
        'logfn'        => function ($msg) { echo $msg . "\n"; },
        'stream_size'  => 0,
        'scrub_auth'   => true,
        'http'         => true,
        'auth_headers' => [
            'X-My-Secret-Header' => '[REDACTED]',
        ],
        'auth_strings' => [
            '/SuperSecret=[A-Za-z0-9]{20}/i' => 'SuperSecret=[REDACTED]',
        ],
    ]
]);

// Perform an operation to see the debug output
$s3->listBuckets();
```

**注意**  
此选项还输出由 `http` 调试选项生成的底层 HTTP 处理程序信息。调试输出对于在 适用于 PHP 的 AWS SDK中诊断问题极其有用。在开发工具包中打开问题时，请为隔离的故障案例提供调试输出。

## stats
<a name="config-stats"></a>

Type  
 `bool|array` 

将传输统计数据绑定到开发工具包操作返回的错误和结果。

设置为 `true` 以收集有关所发送请求的传输统计数据。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'stats'   => true
]);

// Perform an operation
$result = $s3->listBuckets();
// Inspect the stats
$stats = $result['@metadata']['transferStats'];
```

您也可以提供包含以下键的关联数组。

**retries (bool)**  
设置为 `false` 以对尝试的重试禁用报告。默认情况下，会收集并返回重试统计数据。

**http (bool)**  
设置`true`为可以从较低级别的 HTTP 适配器收集统计信息（例如，中返回的值 GuzzleHttpTransferStats）。HTTP 处理程序必须支持 \$1\$1on\$1transfer\$1stats 选项，此设置才会生效。HTTP 统计数据以关联数组的索引数组的形式返回；每个关联数组都包含客户端的 HTTP 处理程序为请求返回的传输统计数据。默认情况下禁用。  
如果重试了某个请求，则会返回每次请求的传输统计数据，`$result['@metadata']['transferStats']['http'][0]` 包含第一次请求的统计数据，`$result['@metadata']['transferStats']['http'][1]` 包含第二次请求的统计数据，以此类推。

**timer (bool)**  
设置为 `true` 以启用命令计时器，可报告某一操作所用的总挂钟时间（以秒为单位）。默认情况下禁用。

```
$s3 = new Aws\S3\S3Client([
    'region'  => 'us-west-2',
    'stats'   => [
        'retries'      => true,
        'timer'        => false,
        'http'         => true,
    ]
]);

// Perform an operation
$result = $s3->listBuckets();
// Inspect the HTTP transfer stats
$stats = $result['@metadata']['transferStats']['http'];
// Inspect the number of retries attempted
$stats = $result['@metadata']['transferStats']['retries_attempted'];
// Inspect the total backoff delay inserted between retries
$stats = $result['@metadata']['transferStats']['total_retry_delay'];
```

## 端点
<a name="endpoint"></a>

Type  
 `string` 

Web 服务的完整 URI。这是 [AWS Elemental MediaConvert](https://docs.aws.amazon.com/mediaconvert/latest/ug/) 等服务所必需的，这些服务使用账户特定的端点。对于这些服务，请使用 `describeEndpoints` 方法请求此端点。

仅在连接到自定义端点（例如，Amazon S3 的本地版本或[本地 Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html)）时需要。

以下是连接到本地 Amazon DynamoDB 的示例：

```
$client = new Aws\DynamoDb\DynamoDbClient([
    'version'  => '2012-08-10',
    'region'   => 'us-east-1',
    'endpoint' => 'http://localhost:8000'
]);
```

有关可用[AWS 区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html)的列表，请参阅 AWS 区域和终端节点。

## endpoint\$1provider
<a name="endpoint-provider"></a>

Type  
 `Aws\EndpointV2\EndpointProviderV2|callable` 

 EndpointProviderV2 或 PHP 的可调用实例，它接受选项的哈希值，包括 “服务” 和 “区域” 密钥。它会返回 `NULL` 或端点数据的哈希值，其中“端点”键是必需的。

以下示例演示如何创建最简单的端点提供程序。

```
$provider = function (array $params) {
    if ($params['service'] == 'foo') {
        return ['endpoint' => $params['region'] . '.example.com'];
    }
    // Return null when the provider cannot handle the parameters
    return null;
});
```

## endpoint\$1discovery
<a name="endpoint-discovery"></a>

Type  
 `array|Aws\CacheInterface|Aws\EndpointDiscovery\ConfigurationInterface|callable` 

端点发现识别并连接到支持端点发现的服务 API 的正确端点。对于支持但不需要端点发现的服务，请在客户端创建期间启用 `endpoint_discovery`。如果服务不支持端点发现，则忽略此配置。

 `Aws\EndpointDiscovery\ConfigurationInterface` 

一个可选配置提供程序，可针对服务指定的操作实现自动连接到服务 API 的相应端点。

`Aws\EndpointDiscovery\Configuration` 对象接受两个选项，包括布尔值“enabled”（指示是否启用端点发现）和整数“cache\$1limit”（指示端点缓存中的最大键数量）。

对于创建的每个客户端，传递一个 `Aws\EndpointDiscovery\Configuration` 对象以使用端点发现的特定配置。

```
use Aws\EndpointDiscovery\Configuration;
use Aws\S3\S3Client;

$enabled = true;
$cache_limit = 1000;

$config = new Aws\EndpointDiscovery\Configuration (
    $enabled,
    $cache_limit
);

$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-2',
    'endpoint_discovery' => $config,

]);
```

传递 `Aws\CacheInterface` 的实例以缓存端点发现在多个流程中返回的值。

```
use Aws\DoctrineCacheAdapter;
use Aws\S3\S3Client;
use Doctrine\Common\Cache\ApcuCache;

$s3 = new S3Client([
    'region'      => 'us-west-2',
    'endpoint_discovery' => new DoctrineCacheAdapter(new ApcuCache),
]);
```

将数组传递到端点发现。

```
use Aws\S3\S3Client;

$s3 = new S3Client([
    'region'      => 'us-west-2',
    'endpoint_discovery' => [
        'enabled' => true,
        'cache_limit' => 1000
    ],
]);
```

## handler
<a name="handler"></a>

Type  
 `callable` 

一个处理程序，接受命令对象和请求对象，并返回已完成并显示 `GuzzleHttp\Promise\PromiseInterface` 对象或者已拒绝并显示 `Aws\ResultInterface` 的承诺 (`Aws\Exception\AwsException`)。处理程序不接受下一个处理程序，因为它是终端，预期应执行命令。如果未提供任何处理程序，则使用默认的 Guzzle 处理程序。

您可以使用 `Aws\MockHandler` 返回模拟结果或引发模拟异常。您将结果或异常入队，然后将按照 FIFO 顺序 MockHandler 将它们出队。

```
use Aws\Result;
use Aws\MockHandler;
use Aws\DynamoDb\DynamoDbClient;
use Aws\CommandInterface;
use Psr\Http\Message\RequestInterface;
use Aws\Exception\AwsException;

$mock = new MockHandler();

// Return a mocked result
$mock->append(new Result(['foo' => 'bar']));

// You can provide a function to invoke; here we throw a mock exception
$mock->append(function (CommandInterface $cmd, RequestInterface $req) {
    return new AwsException('Mock exception', $cmd);
});

// Create a client with the mock handler
$client = new DynamoDbClient([
    'region' => 'us-east-1',
    'handler' => $mock
]);

// Result object response will contain ['foo' => 'bar']
$result = $client->listTables();

// This will throw the exception that was enqueued
$client->listTables();
```

## http
<a name="config-http"></a>

Type  
 `array` 

设置为一组 HTTP 选项，这些选项将应用于开发工具包所创建的 HTTP 请求和传输。

开发工具包支持以下配置选项：

### cert
<a name="http-cert"></a>

Type  
 `string|array` 

指定 PEM 格式的客户端证书。
+ 设置为一个字符串，此字符串表示仅到证书文件的路径。

```
use Aws\S3\S3Client;

$client = new S3Client([
    'region'  => 'us-west-2',
    'http'    => ['cert' => '/path/to/cert.pem']
]);
```
+ 设置为包含路径和密码的数组。

```
use Aws\S3\S3Client;

$client = new S3Client([
    'region'  => 'us-west-2',
    'http'    => [
        'cert' => ['/path/to/cert.pem', 'password']
    ]
]);
```

### connect\$1timeout
<a name="http-connect-timeout"></a>

一个浮点数，描述在尝试连接服务器时要等待的秒数。使用 `0` 无限期等待（默认行为）。

```
use Aws\DynamoDb\DynamoDbClient;

// Timeout after attempting to connect for 5 seconds
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'connect_timeout' => 5
    ]
]);
```

### debug
<a name="http-debug"></a>

Type  
 `bool|resource` 

指示基础 HTTP 处理程序输出调试信息。不同 HTTP 处理程序提供的调试信息会有所不同。
+ 传递 `true` 以将调试输出写入 STDOUT。
+ 传递 `resource` 返回的 `fopen`，以将调试输出写入特定的 PHP 流资源。

### decode\$1content
<a name="http-decode-content"></a>

Type  
 `bool` 

指示基础 HTTP 处理程序扩大压缩响应的正文。如果不启用，压缩的响应正文可能用 `GuzzleHttp\Psr7\InflateStream` 来扩大。

**注意**  
默认情况下，在开发工具包的默认 HTTP 处理程序中会启用内容解码。为了实现向后兼容性，此默认设置无法更改。如果在 Amazon S3 中存储压缩文件，我们建议您在 S3 客户端级别禁用内容解码。  

```
use Aws\S3\S3Client;
use GuzzleHttp\Psr7\InflateStream;

$client = new S3Client([
    'region'  => 'us-west-2',
    'http'    => ['decode_content' => false],
]);

$result = $client->getObject([
    'Bucket' => 'amzn-s3-demo-bucket',
    'Key'    => 'massize_gzipped_file.tgz'
]);

$compressedBody = $result['Body']; // This content is still gzipped
$inflatedBody = new InflateStream($result['Body']); // This is now readable
```

### delay
<a name="http-delay"></a>

Type  
 `int` 

在发送请求之前要延迟的毫秒数。这通常用于重试请求之前的延迟。

### expect
<a name="http-expect"></a>

Type  
 `bool|string` 

此选项将传递至基础 HTTP 处理程序。默认情况下，将在请求的正文超过 1 MB 时设置“Expect: 100-Continue”标头。`true` 或 `false` 在所有请求上启用或禁用该标头。如果使用整数，则仅其正文超出此设置的请求将使用该标头。用作整数时，如果正文大小未知，则将发送 Expect 标头。

**警告**  
禁用 Expect 标头可防止服务返回身份验证或其他错误。应小心地配置此选项。

### 进度
<a name="http-progress"></a>

Type  
 `callable` 

定义要在有了传输进度时调用的函数。该函数接受以下参数：

1. 预计要下载的总字节数。

1. 到目前为止下载的字节数。

1. 预计要上传的字节数。

1. 到目前为止上传的字节数。

```
use Aws\S3\S3Client;

$client = new S3Client([
    'region'  => 'us-west-2'
]);

// Apply the http option to a specific command using the "@http"
// command parameter
$result = $client->getObject([
    'Bucket' => 'amzn-s3-demo-bucket',
    'Key'    => 'large.mov',
    '@http' => [
        'progress' => function ($expectedDl, $dl, $expectedUl, $ul) {
            printf(
                "%s of %s downloaded, %s of %s uploaded.\n",
                $expectedDl,
                $dl,
                $expectedUl,
                $ul
            );
        }
    ]
]);
```

### proxy
<a name="http-proxy"></a>

Type  
 `string|array` 

您可以使用`proxy`选项通过代理连接到 AWS 服务。
+ 提供一个字符串值以连接到所有类型的代理 URIs。该代理字符串值可以包含方案、用户名和密码。例如 `"http://username:password@192.168.16.1:10"`。
+ 提供代理设置的关联数组，其中键是 URI 的方案，值是给定 URI 的代理（即，您可以为“http”和“https”端点提供不同的代理）。

```
use Aws\DynamoDb\DynamoDbClient;

// Send requests through a single proxy
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'proxy' => 'http://192.168.16.1:10'
    ]
]);

// Send requests through a different proxy per scheme
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'proxy' => [
            'http' => 'tcp://192.168.16.1:10',
            'https' => 'tcp://192.168.16.1:11',
        ]
    ]
]);
```

您可以使用 `HTTP_PROXY` 环境变量来配置“http”协议特定的代理，使用 `HTTPS_PROXY` 环境变量来配置“https”特定的代理。

### sink
<a name="http-sink"></a>

Type  
 `resource|string|Psr\Http\Message\StreamInterface` 

`sink` 选项控制要将操作的响应数据下载到的位置。
+ 提供 `resource` 返回的 `fopen`，以将响应正文下载到 PHP 流。
+ 以 `string` 值的形式提供文件在磁盘上的路径，以将响应正文下载到磁盘上的特定文件。
+ 提供 `Psr\Http\Message\StreamInterface`，以将响应正文下载到特定的 PSR 流对象。

**注意**  
默认情况下，开发工具包会将响应正文下载到 PHP 临时流。这意味着，数据会一直保留在内存中，直到正文大小达到 2 MB，此时数据将被写入磁盘上的临时文件中。

### synchronous
<a name="http-sync"></a>

Type  
 `bool` 

`synchronous` 选项会告知基础 HTTP 处理程序，您打算阻止结果。

### 流
<a name="http-stream"></a>

Type  
 `bool` 

设置为 `true`，以告知基础 HTTP 处理程序，您要从 Web 服务流式传输响应的响应正文，而不是预先进行下载。例如，Amazon S3 流包装类中依赖此选项来确保对数据进行流式传输。

### timeout
<a name="http-timeout"></a>

Type  
 `float` 

一个浮点数，描述请求超时（以秒为单位）。使用 `0` 无限期等待 (默认行为)。

```
use Aws\DynamoDb\DynamoDbClient;

// Timeout after 5 seconds
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'timeout' => 5
    ]
]);
```

### 确认
<a name="http-verify"></a>

Type  
 `bool|string` 

您可以使用`verify``http`选项自定义 SDK 的对等 SSL/TLS 证书验证行为。
+ 设置`true`为可启用 SSL/TLS 对等证书验证并使用操作系统提供的默认 CA 捆绑包。
+ 设置为 `false` 以禁用对等证书验证。（这样不安全！）
+ 设置为一个字符串，以提供 CA 证书捆绑包的路径，从而使用自定义 CA 捆绑包启用验证。

如果找不到系统的 CA 捆绑包并且收到错误，请向开发工具包提供 CA 捆绑包的路径。如果您不需要特定的 CA 捆绑包，Mozilla 提供了可从[此处](https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt)下载的常用 CA 捆绑包（由 cURL 的维护者维护）。一旦您的磁盘中具有 CA 捆绑包，则可将 `openssl.cafile` PHP.ini 设置为指向该文件的路径，从而忽略 `verify` 请求选项。您可以在 [cURL 网站](http://curl.haxx.se/docs/sslcerts.html)上了解有关 SSL 证书的更多详细信息。

```
use Aws\DynamoDb\DynamoDbClient;

// Use a custom CA bundle
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'verify' => '/path/to/my/cert.pem'
    ]
]);

// Disable SSL/TLS verification
$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http'    => [
        'verify' => false
    ]
]);
```

## http\$1handler
<a name="http-handler"></a>

Type  
 `callable` 

`http_handler` 选项用于将开发工具包与其他 HTTP 客户端集成。`http_handler` 选项是一个函数，接受 `Psr\Http\Message\RequestInterface` 对象和一组应用于命令的 `http` 选项，并返回已完成并显示 `GuzzleHttp\Promise\PromiseInterface` 对象或已拒绝并显示以下一组异常数据的 `Psr\Http\Message\ResponseInterface` 对象：
+  `exception` - (`\Exception`) 遇到的异常。
+  `response` - (`Psr\Http\Message\ResponseInterface`) 收到的响应（如果有）。
+  `connection_error` - (bool) 设置为 `true` 以将错误标记为连接错误。将此值设置为 `true` 还允许开发工具包自动重试该操作（如果需要）。

开发工具包通过用 `http_handler` 对象包装所提供的 `handler` 来将给定的 `http_handler` 转换为正常 `Aws\WrappedHttpHandler` 选项。

默认情况下，开发工具包使用 Guzzle 作为其 HTTP 处理程序。您可以在这里提供不同的 HTTP 处理程序，或者为 Guzzle 客户端提供您自己的自定义选项。

 **设置 TLS 版本** 

一种使用情形是使用 Curl 来设置 Guzzle 使用的 TLS 版本，前提是您的环境中已安装了 Curl。请注意 Curl 对于所支持的 TLS 版本的[版本约束](https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html)。默认情况下会使用最新版本。如果明确设置了 TLS 版本，但是远程服务器不支持此版本，则会产生错误，而不是使用更低的 TLS 版本。

您可以通过将 `debug` 客户端选项设置为 true 并检查 SSL 连接输出，确定用于给定客户端操作的 TLS 版本。此行看起来类似于：`SSL connection using TLSv1.2`

设置 Guzzle 6 使用 TLS 1.2 的示例：

```
use Aws\DynamoDb\DynamoDbClient;
use Aws\Handler\GuzzleV6\GuzzleHandler;
use GuzzleHttp\Client;

$handler = new GuzzleHandler(
    new Client([
        'curl' => [
            CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2
        ]
    ])
);

$client = new DynamoDbClient([
    'region'  => 'us-west-2',
    'http_handler' => $handler
]);
```

**注意**  
`http_handler` 选项会取代所提供的任何 `handler` 选项。

## 配置文件
<a name="profile"></a>

Type  
 `string` 

“profile” 选项指定从主目录中的凭据文件创建 AWS 凭据时要使用的配置文件（通常`~/.aws/credentials`）。此设置将覆盖 `AWS_PROFILE` 环境变量。

**注意**  
指定 “配置文件” 选项时，将忽略该`"credentials"`选项，并忽略 AWS 配置文件中与凭据相关的设置（通常`~/.aws/config`）。

```
// Use the "production" profile from your credentials file
$ec2 = new Aws\Ec2\Ec2Client([
    'version' => '2014-10-01',
    'region'  => 'us-west-2',
    'profile' => 'production'
]);
```

有关配置[凭据和.ini 文件格式的更多信息，请参阅 适用于 PHP 的 AWS SDK 版本 3](guide_credentials.md) 的凭据。

## region
<a name="cfg-region"></a>

Type  
 `string` 

必需  
true

AWS 要连接的区域。有关可用区域的列表，请参阅 [AWS 区域和端点](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

```
// Set the Region to the EU (Frankfurt) Region
$s3 = new Aws\S3\S3Client([
    'region'  => 'eu-central-1',
    'version' => '2006-03-01'
]);
```

## 重试
<a name="config-retries"></a>

Type  
 `int|array|Aws\CacheInterface|Aws\Retry\ConfigurationInterface|callable` 

默认  
 `int(3)` 

配置重试模式和对客户端允许的最大重试次数。传递 `0` 以禁用重试。

三种重试模式是：
+ `legacy`：默认的旧版重试实现
+ `standard`：添加了重试配额系统，以防止不太可能成功的重试 
+  `adaptive`：构建在标准模式上，添加了客户端速率限制器。请注意，此模式被认为是实验性的。

重试的配置由每个请求使用的模式和最大尝试次次数组成。配置可以按以下优先顺序在几个不同的位置进行设置。

 **优先顺序** 

重试配置的优先级顺序如下所示（1 覆盖 2-3，等等）：

1. 客户端配置选项

1. 环境变量

1. AWS 共享配置文件

 **环境变量** 
+  `AWS_RETRY_MODE` – 设置为 `legacy`、`standard` 或 `adaptive`。
+  `AWS_MAX_ATTEMPTS` – 设置为整数值，表示每个请求的最大尝试次数

 **共享的配置文件密钥** 
+  `retry_mode` – 设置为 `legacy`、`standard` 或 `adaptive`。
+  `max_attempts` – 设置为整数值，表示每个请求的最大尝试次数

 **客户端配置** 

下面的示例将对 Amazon DynamoDB 客户端禁用重试。

```
// Disable retries by setting "retries" to 0
$client = new Aws\DynamoDb\DynamoDbClient([
    'version' => '2012-08-10',
    'region'  => 'us-west-2',
    'retries' => 0
]);
```

以下示例传入一个整数，这将默认为 `legacy` 模式并使用传入整数作为重试次数

```
// Disable retries by setting "retries" to 0
$client = new Aws\DynamoDb\DynamoDbClient([
    'version' => '2012-08-10',
    'region'  => 'us-west-2',
    'retries' => 6
]);
```

**`Aws\Retry\Configuration` 对象接受两个参数，即重试模式**  
和表示每个请求的最大尝试次数的整数。此示例传递一个

 用于重试配置的 `Aws\Retry\Configuration` 对象。

```
use Aws\EndpointDiscovery\Configuration;
use Aws\S3\S3Client;

$enabled = true;
$cache_limit = 1000;

$config = new Aws\Retry\Configuration('adaptive', 10);

$s3 = new Aws\S3\S3Client([
    'region' => 'us-east-2',
    'retries' => $config,
]);
```

此示例传入一个用于重试配置的数组。

```
use Aws\S3\S3Client;

$s3 = new S3Client([
    'region' => 'us-west-2',
    'retries' => [
        'mode' => 'standard',
        'max_attempts' => 7
    ],
]);
```

此示例传递 `Aws\CacheInterface` 的实例以缓存默认重试配置提供程序返回的值。

```
use Aws\DoctrineCacheAdapter;
use Aws\S3\S3Client;
use Doctrine\Common\Cache\ApcuCache;

$s3 = new S3Client([
    'region' => 'us-west-2',
    'endpoint_discovery' => new DoctrineCacheAdapter(new ApcuCache),
]);
```

## scheme
<a name="scheme"></a>

Type  
 `string` 

默认  
 `string(5) "https"` 

连接时要使用的 URI 方案。默认情况下，开发工具包会使用“https”端点（即使用 SSL/TLS 连接）。您可以通过将 `scheme` 设置为“http”，尝试通过未加密的“http”端点来连接服务。

```
$s3 = new Aws\S3\S3Client([
    'version' => '2006-03-01',
    'region'  => 'us-west-2',
    'scheme'  => 'http'
]);
```

有关端点列表以及服务是否支持 `http` 方案，请参阅 [AWS 区域和端点](https://docs.aws.amazon.com/general/latest/gr/rande.html)。

## 服务
<a name="service"></a>

Type  
 `string` 

必需  
true

要使用的服务的名称。在使用开发工具包提供的客户端时，默认情况下会提供此值（即 `Aws\S3\S3Client`）。在测试开发工具包中尚未发布但磁盘中已提供的服务时，此选项很有用。

## signature\$1provider
<a name="signature-provider"></a>

Type  
 `callable` 

一种可调用对象，它接受签名版本名称（例如`v4`）、服务名称和 AWS 区域并返回`Aws\Signature\SignatureInterface`对象，`NULL`或者提供者能够为给定参数创建签名者。此提供程序用于创建供客户端使用的签署人。

开发工具包在 `Aws\Signature\SignatureProvider` 类中提供了可用于创建自定义签名提供程序的不同函数。

## signature\$1version
<a name="signature-version"></a>

Type  
 `string` 

一个字符串，表示要用于服务的自定义签名版本（例如 `v4` 等）。如果需要，每个操作签名版本均可能覆盖此请求的签名版本。

以下示例展示了如何配置要使用[签名版本 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) 的 Amazon S3 客户端：

```
// Set a preferred signature version
$s3 = new Aws\S3\S3Client([
    'version'           => '2006-03-01',
    'region'            => 'us-west-2',
    'signature_version' => 'v4'
]);
```

**注意**  
客户端使用的 `signature_provider` 必须能够创建您提供的 `signature_version` 选项。开发工具包使用的默认 `signature_provider` 可以创建“v4”和“anonymous”签名版本的签名对象。

## ua\$1append
<a name="ua-append"></a>

Type  
 `string|string[]` 

默认  
 `[]` 

添加到传递给 HTTP 处理程序的用户代理字符串的字符串或字符串数组。

## use\$1aws\$1shared\$1config\$1files
<a name="use-aws-shared-config-files"></a>

Type  
 `bool|array` 

默认  
 `bool(true)` 

设置为 false 可禁用在 '\$1/ 中检查共享配置文件。 aws/config’ and ‘\$1/.aws/credentials'。这将覆盖 AWS\$1CONFIG\$1FILE 环境变量。

## 验证
<a name="validate"></a>

Type  
 `bool|array` 

默认  
 `bool(true)` 

设置为 `false` 以禁用客户端参数验证。您可能会发现，关闭验证会略微提高性能，但区别可以忽略不计。

```
// Disable client-side validation
$s3 = new Aws\S3\S3Client([
    'version'  => '2006-03-01',
    'region'   => 'eu-west-1',
    'validate' => false
]);
```

设置为关联的验证选项数组，以启用特定的验证约束：
+  `required` - 验证必需的参数是否存在（默认启用）。
+  `min` - 验证值的最小长度（默认启用）。
+  `max` - 验证值的最大长度。
+  `pattern` - 验证值是否与正则表达式匹配。

```
// Validate only that required values are present
$s3 = new Aws\S3\S3Client([
    'version'  => '2006-03-01',
    'region'   => 'eu-west-1',
    'validate' => ['required' => true]
]);
```

## 版本
<a name="cfg-version"></a>

Type  
 `string` 

必需  
false

此选项指定要使用的 Web 服务的版本（例如，`2006-03-01`）。

从 SDK 的版本 3.277.10 开始，“版本”选项不再是必需的。如果没有指定“版本”选项，则 SDK 使用服务客户端的最新版本。

在创建服务客户端时，有两种情况需要“版本”参数。
+ 您使用的是 3.277.10 之前的 PHP SDK 版本。
+ 您使用的是 3.277.10 或更高版本，并且想要使用不是“最新”版本的服务客户端版本。

例如，以下代码段使用了 SDK 的版本 3.279.7，但不是 `Ec2Client` 的最新版本。

```
$ec2Client = new \Aws\Ec2\Ec2Client([
    'version' => '2015-10-01',
    'region' => 'us-west-2'
]);
```

指定版本约束可确保对服务所做的重大更改不会影响您的代码。

在每个客户端的 [API 文档页面](https://docs.aws.amazon.com/aws-sdk-php/v3/api/index.html)上均提供了可用 API 版本的列表。如果您无法加载特定 API 版本，则可能需要更新开发工具包副本。