Guzzle HTTP客户端库提供了多种方式来进行鉴权,并且支持异步操作。以下是如何在Guzzle中执行鉴权和使用异步操作的示例:
1. 基本鉴权
Guzzle支持基本的HTTP基本认证(Basic Authentication)鉴权。您可以使用auth
选项来指定用户名和密码。
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。
use GuzzleHttp\Client;$client = new Client(['base_uri' => 'https://example.com','headers' => ['Authorization' => 'Bearer ' . $accessToken]
]);$response = $client->get('/api/endpoint');
3. 自定义鉴权
如果您需要执行自定义的鉴权逻辑,您可以使用request
选项来创建自定义请求中间件。
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
对象来执行异步操作。以下是一个简单的异步示例:
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来管理和等待结果。确保在实际应用中添加适当的错误处理和超时处理逻辑,以确保可靠性和性能。