Guzzle 用于 PHP:完整指南与示例

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

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

开始课程

什么是 Guzzle,为什么需要它?



Guzzle 是一个强大的 PHP 库,用于处理 HTTP 请求。它提供了一个便捷的接口,用于发送 HTTP 请求、处理响应、管理 Cookie、会话、异步请求以及许多其他功能。如果您正在使用 API、解析网页或只是与远程服务器交互,Guzzle 将成为您不可或缺的工具。



Guzzle 的主要功能:

  • 支持所有 HTTP 方法(GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS)
  • 处理请求头、请求体、URL 参数
  • 支持异步请求(基于 Promise)
  • 自动处理重定向
  • 管理 Cookie 和会话
  • 中间件用于扩展功能
  • 支持 PSR-7(HTTP 消息的 PSR-7 接口)
  • 简单的测试和模拟


Guzzle 被用于 Laravel(内置 HTTP 客户端)、Drupal、Magento 等大型项目中。



安装



Guzzle 通过 Composer(PHP 的依赖管理器)进行安装。如果您还没有 Composer,请从其官方网站 getcomposer.org 安装。



在项目根目录的终端中执行以下命令:



composer require guzzlehttp/guzzle


安装后,在您的 PHP 文件中引入 Composer 的自动加载器:



require 'vendor/autoload.php';


现在您已准备好使用 Guzzle。



快速入门



让我们向公共 API 发送一个简单的 GET 请求,并以 JSON 格式获取数据。



<?phprequire 'vendor/autoload.php';

use GuzzleHttp\\Client;

$client = new Client();$response = $client->get('https://jsonplaceholder.typicode.com/posts/1');

// 获取响应体$body = $response->getBody();

// 将 JSON 转换为数组$data = json_decode($body, true);

echo "Title: " . $data['title'] . "";echo "Body: " . $data['body'] . "";?>


这个示例展示了如何轻松地从远程服务器获取数据。Guzzle 会自动处理请求头、状态码和响应体。



主要方法和函数



1. get() — GET 请求

功能: 向指定 URL 发送 HTTP GET 请求。用于获取数据。

参数:

  • $uri (string) — 请求的 URL
  • $options (array) — 选项数组(请求头、查询参数、超时等)

示例:

<?php$client = new GuzzleHttp\\Client();$response = $client->get('https://api.github.com/users/octocat', [    'headers' => [        'Accept' => 'application/json',        'User-Agent' => 'Guzzle-Demo'    ],    'query' => [        'page' => 1,        'per_page' => 10    ]]);

echo $response->getStatusCode(); // 200echo $response->getBody();?>


2. post() — POST 请求

功能: 发送 POST 请求。用于创建新资源或向服务器发送数据。

参数:

  • $uri (string) — 请求的 URL
  • $options (array) — 选项数组(body、form_params、json、multipart 等)

示例:

<?php$client = new GuzzleHttp\\Client();$response = $client->post('https://jsonplaceholder.typicode.com/posts', [    'json' => [        'title' => '新帖子',        'body' => '帖子内容',        'userId' => 1    ]]);

echo $response->getStatusCode(); // 201$data = json_decode($response->getBody(), true);print_r(

推荐