Guzzle, 一个功能丰富的PHP HTTP客户端

Php   2025-11-12 08:40   84   0  

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+版本