【PHP】Guzzle 请求方法类封装

2023-12-26 19:38:31

?这段 PHP 代码定义了一个名为 GuzzleClient 的类,用于发送 HTTP 请求。它使用了 Guzzle HTTP 客户端库,这是一个非常流行的 PHP HTTP 客户端库,可以简化发送 HTTP 请求的过程。

<?php

namespace app\common\library;

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

class GuzzleClient
{
    // HTTP 请求方法常量
    private const METHOD_POST = 'POST';
    
    // 保存类的唯一实例
    private static $instance;
    
    // Guzzle 客户端对象
    private $client;

    // 私有构造函数,确保只能在类内部实例化
    private function __construct()
    {
        // 创建 Guzzle 客户端
        $this->client = new Client();
    }

    // 获取类的唯一实例
    public static function getInstance()
    {
        // 如果实例不存在,创建一个新实例
        if (!self::$instance) {
            self::$instance = new self();
        }

        // 返回实例
        return self::$instance;
    }

    // 发送 HTTP 请求的方法
    public function send(string $url, string $type = self::METHOD_POST, ?array $data = null)
    {
        try {
            // 设置默认请求选项
            $options = [
                'headers' => [
                    'Content-Type' => 'application/json',
                ],
            ];

            // 如果有请求数据,将其添加到选项中
            if ($data !== null) {
                $options['json'] = $data;
            }

            // 使用 Guzzle 客户端发送请求
            $response = $this->client->request($type, $url, $options);
            
            // 返回响应的内容
            // var_dump($response->getStatusCode());
            // var_dump($response->getHeaders());
            // var_dump($response->getBody()->getContents());
            return $response->getBody()->getContents();
        } catch (GuzzleException $e) {
            // 发生异常时,记录详细的错误信息
            error_log($e->getMessage() . ' URL: ' . $url . ' Data: ' . json_encode($data));
            
            // 抛出异常给上层调用者处理
            throw $e;
        }
    }
}

// 示例用法
try {
    // 获取 GuzzleClient 的实例
    $client = GuzzleClient::getInstance();

    // 使用实例发送请求
    $response = $client->send('https://jsonplaceholder.typicode.com/posts/1', 'GET');

    // 输出响应内容
    echo $response;
} catch (GuzzleException $e) {
    // 处理异常
    echo 'Error: ' . $e->getMessage();
}

GuzzleClient 类包含以下属性和方法:

  • METHOD_POST:一个常量,表示 HTTP POST 请求方法。
  • instance:一个静态属性,用于保存类的唯一实例。
  • client:一个属性,用于保存 Guzzle 客户端对象。
  • __construct():一个私有构造函数,确保只能在类内部实例化。
  • getInstance():一个静态方法,用于获取类的唯一实例。
  • send():一个方法,用于发送 HTTP 请求。它接受 URL、请求方法(默认为 POST)和请求数据(默认为 null)作为参数。

send() 方法中,首先设置默认请求选项,包括请求头中的 Content-Typeapplication/json。然后,如果有请求数据,将其添加到选项中。接下来,使用 Guzzle 客户端发送请求,并捕获任何可能的异常。如果发生异常,记录详细的错误信息,并抛出异常给上层调用者处理。

在示例用法中,首先获取 GuzzleClient 的实例,然后使用实例发送 GET 请求。最后,输出响应内容。如果发生异常,输出错误信息。

文章来源:https://blog.csdn.net/q8688/article/details/135226939
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。