?这段 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-Type
为 application/json
。然后,如果有请求数据,将其添加到选项中。接下来,使用 Guzzle 客户端发送请求,并捕获任何可能的异常。如果发生异常,记录详细的错误信息,并抛出异常给上层调用者处理。
在示例用法中,首先获取 GuzzleClient
的实例,然后使用实例发送 GET 请求。最后,输出响应内容。如果发生异常,输出错误信息。