Guzzle HTTP客户端库提供了多种方式来进行鉴权,并且支持异步操作。以下是如何在Guzzle中执行鉴权和使用异步操作的示例:
1. 基本鉴权
Guzzle支持基本的HTTP基本认证(Basic Authentication)鉴权。您可以使用auth
选项来指定用户名和密码。
php
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => 'https://example.com',
'auth' => ['username', 'password']
]);
$response = $client->get('/api/endpoint');
2. Bearer Token 鉴权
Bearer Token鉴权通常用于OAuth2认证等场景。您可以使用headers
选项来添加Bearer Token。
php
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => 'https://example.com',
'headers' => [
'Authorization' => 'Bearer ' . $accessToken
]
]);
$response = $client->get('/api/endpoint');
3. 自定义鉴权
如果您需要执行自定义的鉴权逻辑,您可以使用request
选项来创建自定义请求中间件。
php
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;
$stack = HandlerStack::create();
// 自定义鉴权逻辑
$stack->push(Middleware::mapRequest(function ($request) use ($customToken) {
// 添加自定义鉴权头部
return $request->withHeader('Authorization', 'Custom ' . $customToken);
}));
$client = new Client([
'base_uri' => 'https://example.com',
'handler' => $stack
]);
$response = $client->get('/api/endpoint');
异步操作
Guzzle支持异步HTTP请求。您可以使用Promise
对象来执行异步操作。以下是一个简单的异步示例:
php
use GuzzleHttp\Client;
use GuzzleHttp\Promise;
$client = new Client();
$promises = [
'request1' => $client->getAsync('https://example.com/api/endpoint1'),
'request2' => $client->getAsync('https://example.com/api/endpoint2'),
'request3' => $client->getAsync('https://example.com/api/endpoint3'),
];
$results = Promise\settle($promises)->wait();
foreach ($results as $key => $result) {
if ($result['state'] === 'fulfilled') {
$response = $result['value'];
// 处理成功的响应
} else {
$exception = $result['reason'];
// 处理异常
}
}
请注意,异步操作需要使用Promise来管理和等待结果。确保在实际应用中添加适当的错误处理和超时处理逻辑,以确保可靠性和性能。