PHP HTTP客户端:顶级请求处理库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

HTTP 客户端 PHP 库:处理请求的顶级库



现代 PHP 开发中,发送 HTTP 请求几乎不可或缺:集成外部 API、解析网页、检查服务可用性。PHP 内置的工具(如 file_get_contents() 或 cURL)往往不够灵活或不便捷。幸运的是,PHP 生态系统提供了强大的客户端库,简化了 HTTP 操作。本文我们将盘点PHP 顶级 HTTP 客户端库,介绍其特点及使用示例。



1. Guzzle — 事实上的标准



Guzzle 是 PHP 中最流行的 HTTP 库。数百万个项目已安装该库,包括 Laravel、Drupal 和 Symfony。Guzzle 提供简洁的面向对象接口,支持异步请求、中间件、连接池和 PSR-18 (HTTP Client)。



安装

composer require guzzlehttp/guzzle


示例:GET 请求与响应处理

<?phprequire 'vendor/autoload.php';

use GuzzleHttp\\Client;

$client = new Client([ 'base_uri' => 'https://api.github.com/', 'timeout' => 5.0,]);

$response = $client->request('GET', 'users/octocat');

echo $response->getStatusCode(); // 200$body = json_decode($response->getBody(), true);echo $body['login']; // octocat?>


异步请求

<?php$promise = $client->getAsync('https://httpbin.org/delay/1');$promise->then(    function ($response) {        echo '完成: ' . $response->getStatusCode();    },    function ($exception) {        echo '错误: ' . $exception->getMessage();    });$promise->wait(); // 必须调用以执行?>


优点: 庞大的社区,灵活性高,用于日志/缓存的中间件,完全支持 PSR-7/PSR-18。



2. Symfony HttpClient — 快速且现代



Symfony HttpClient 组件自 Symfony 4.4 引入,因其高性能、内置 HTTP/2 多路复用支持以及与 Symfony 的出色集成而迅速流行。它也兼容 PSR-18。



安装

composer require symfony/http-client


示例:并行请求

<?phprequire 'vendor/autoload.php';

use Symfony\\Component\\HttpClient\\HttpClient;

$client = HttpClient::create();

$responses = [];$urls = [ 'https://api.github.com/users/octocat', 'https://api.github.com/users/nonexistent',];

foreach ($urls as $url) { $responses[] = $client->request('GET', $url);}

foreach ($responses as $response) { // getContent() 方法会自动等待响应 echo $response->getStatusCode() . ' - ' . $response->getContent(false) . "";}?>


高级用法:重试和缓存

<?phpuse Symfony\\Component\\HttpClient\\RetryableHttpClient;use Symfony\\Component\\HttpClient\\HttpClient;

$client = new RetryableHttpClient( HttpClient::create(['timeout' => 2.0]), maxRetries: 3);

$response = $client->request('GET', 'https://example.com');echo $response->getContent();?>


优点: 高速度,内置重试机制,支持 HTTP/2 push,低内存消耗。



3. cURL (PHP 扩展) — 经典之选



cURL 扩展是 PHP 内置的解决方案,直接与 libcurl 交互。它无需安装第三方库,但代码更偏向底层。适用于简单任务或无法使用 Composer 的情况。



示例:简单的 POST 请求

<?php$ch = curl_init('https://httpbin.org/post');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_POSTFIELDS => http_build_query(['name' => 'John', 'age' => 30]),]);

$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);

echo $httpCode; // 200echo $response;?>


优点: 无需外部依赖,对请求的完全控制,支持所有 libcurl 协议。

推荐