核心内容摘要
汤芳人《巅》:一场跨越时空的艺术对话,窥见人性的至臻之境
PHP cURL 全面
总结cURL 是 PHP 内置的网络请求扩展支持 HTTP/HTTPS/FTP 等多种协议是处理网络通信的基础工具。
cURL 核心使用流程cURL 的标准流程分为四步初始化 → 设置选项 → 执行请求 → 关闭会话。
?php //
初始化 cURL 会话 $ch curl_init(); if ($ch false) { die(cURL 初始化失败); } //
设置请求选项 curl_setopt_array($ch, [ CURLOPT_URL https://api.example.com/data, CURLOPT_RETURNTRANSFER true, // 响应以字符串返回 CURLOPT_TIMEOUT 30, // 超时时间秒 CURLOPT_SSL_VERIFYPEER false, // 开发环境可关闭SSL验证 CURLOPT_HTTPHEADER [ Content-Type: application/json, Authorization: Bearer your_token ] ]); //
执行请求 $response curl_exec($ch); //
错误处理 if (curl_errno($ch)) { $error_msg curl_error($ch); echo 请求失败 . $error_msg; } //
获取响应信息 $http_code curl_getinfo($ch, CURLINFO_HTTP_CODE); $response_info curl_getinfo($ch); //
关闭会话 curl_close($ch); // 处理响应 if ($http_code
{ $data json_decode($response, true); print_r($data); } else { echo 请求失败状态码 . $http_code; } ?
cURL 常见请求类型示例1POST 请求JSON 数据?php $ch curl_init(); curl_setopt_array($ch, [ CURLOPT_URL https://api.example.com/post, CURLOPT_RETURNTRANSFER true, CURLOPT_POST true, CURLOPT_POSTFIELDS json_encode([ name test, age 20 ]), CURLOPT_HTTPHEADER [ Content-Type: application/json ] ]); $response curl_exec($ch); curl_close($ch); ?2文件上传?php $ch curl_init(); $file_path realpath(test.jpg); $post_data [ file new CURLFile($file_path, image/jpeg, test.jpg) ]; curl_setopt_array($ch, [ CURLOPT_URL https://api.example.com/upload, CURLOPT_RETURNTRANSFER true, CURLOPT_POST true, CURLOPT_POSTFIELDS $post_data ]); $response curl_exec($ch); curl_close($ch); ?
cURL 核心优缺点优点缺点内置扩展无需额外安装代码冗余每次请求需重复写初始化/关闭逻辑支持多种协议错误处理繁琐需手动判断curl_errno底层可控自定义细节不支持异步请求性能优化成本高兼容性好支持所有PHP处理 JSON/表单数据需手动格式化
Guzzle 扩展使用与
总结Guzzle 是 PHP 生态中最流行的现代化 HTTP 客户端基于 cURL 封装极大提升了易用性支持 PSR-7 标准是生产环境首选。
安装 Guzzle使用 Composer 安装要求 PHP
2composer require guzzlehttp/guzzle
Guzzle 核心使用示例1基础 GET 请求?php require vendor/autoload.php; use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException; $client new Client([ base_uri https://api.example.com, timeout
3
0, ]); try { $response $client-get(/data, [ query [ page 1, size 10 ], headers [ Authorization Bearer your_token ] ]); $status_code $response-getStatusCode(); $body $response-getBody()-getContents(); $data json_decode($body, true); print_r($data); } catch (RequestException $e) { echo 请求失败 . $e-getMessage(); if ($e-hasResponse()) { echo 状态码 . $e-getResponse()-getStatusCode(); } } ?2POST 请求JSON 数据?php $client new Client(); try { $response $client-post(https://api.example.com/post, [ json [ name test, age 20 ] ]); $data json_decode($response-getBody(), true); } catch (RequestException $e) { // 异常处理 } ?3表单提交application/x-www-form-urlencoded?php $client new Client(); $response $client-post(https://api.example.com/form, [ form_params [ username test, password 123456 ] ]); ?4文件上传?php $client new Client(); $response $client-post(https://api.example.com/upload, [ multipart [ [ name file, contents fopen(test.jpg, r), filename test.jpg, headers [Content-Type image/jpeg] ] ] ]); ?5异步请求Guzzle 核心优势?php $client new Client(); $promise1 $client-getAsync(https://api.example.com/
; $promise2 $client-getAsync(https://api.example.com/
; $results GuzzleHttp\Promise\unwrap([$promise1, $promise2]); $response1 $results[0]-getBody()-getContents(); $response2 $results[1]-getBody()-getContents(); ?
Guzzle 核心特性
总结特性说明简洁的 API无需手动初始化/关闭会话一行代码发送请求自动数据格式化内置json/form_params自动处理编码和请求头完善的异常处理统一RequestException捕获所有请求错误异步请求支持并发请求提升多接口调用效率PSR-7 兼容遵循 PHP 标准可与主流框架无缝集成中间件支持可扩展日志、重试、缓存等功能响应便捷操作直接获取状态码、响应头、JSON 解析结果等
cURL vs Guzzle 选型建议场景推荐使用原因简单请求/无 Composer 环境cURL内置扩展无需额外依赖老项目维护PHP
2cURLGuzzle 对 PHP 版本有要求生产环境/复杂请求Guzzle代码简洁、易维护、支持异步和扩展多接口并发调用Guzzle异步请求大幅提升性能框架开发Laravel/TP等Guzzle框架集成符合现代开发规范
总结PHP cURL基础工具内置、兼容性好适用于简单场景或无 Composer 环境但代码冗余、易用性较差。
GuzzlecURL 的现代化封装API 简洁、支持异步、异常处理完善是生产环境处理 HTTP 请求的首选。
选型建议简单场景用 cURL复杂或生产环境优先 Guzzle框架开发直接集成 Guzzle。