Guzzle是一个功能丰富的PHP HTTP客户端,专为简化HTTP请求的发送与响应处理而设计,支持同步/异步请求、代理配置、JSON数据传输等特性。其核心优势在于提供简洁的API接口与灵活的扩展能力,适用于爬虫开发、API调用等场景。
一、基础安装与请求发送
通过Composer可快速集成Guzzle到项目中:
composer require guzzlehttp/guzzle
创建客户端实例后,发送GET/POST请求仅需几行代码:
use GuzzleHttp\Client;
$client = new Client();
// GET请求示例
$response = $client->get('https://wwww.com/data');
// POST请求(JSON参数)
$response = $client->post('https://wwww.com/submit', [
'json' => ['key' => 'value']
]);
二、同步与异步模式对比
同步请求适用于顺序化处理场景,程序阻塞直至收到响应:
$response = $client->get('/status');
echo $response->getStatusCode(); // 直接获取状态码
异步请求则通过Promise机制提升吞吐效率,适合批量任务:
$promise = $client->requestAsync('GET', 'http://www.org/get');
$promise->then(
function ($response) {
echo $response->getBody();
},
function ($e) {
echo $e->getMessage();
}
);
$promise->wait(); // 可控制等待所有异步请求完成
// Send an asynchronous request.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://www.org');
$promise = $client->sendAsync($request)->then(
function ($response) {
echo 'I completed! ' . $response->getBody();
}
);
$promise->wait();
三、高级功能配置
1,代理IP集成
通过proxy参数实现请求路由转发,规避IP限制:
$response = $client->get('https://target.site', [
'proxy' => 'http://user:pass@proxy-host:port'
]);
2,错误处理机制
内置HTTP异常自动抛出功能,支持try-catch捕获:
try {
$client->get('https://www.org');
} catch (GuzzleHttp\Exception\RequestException $e) {
echo '请求失败: ' . $e->getMessage();
}
四、响应解析与数据提取
响应对象封装了多种数据访问方法:
$status = $response->getStatusCode(); // 状态码如200 $headers = $response->getHeaders(); // 获取全部头信息 $content = $response->getBody()->getContents(); // 原始响应内容 $jsonData = json_decode($content); // 手动解析JSON
对于JSON响应,可直接使用json选项自动解码:
response = $client->get('https://www.org/data', ['json' => true]);
$dataArray = $response->json(); // PHP 7+版本