gocanto/http-client

处理重试、日志和动态头部的HTTP客户端。

3.0.0 2022-12-22 08:09 UTC

README

Total Downloads Latest Stable Version Build status

此库是著名Guzzle HTTP客户端的包装,并在其之上添加了一些功能。

此客户端允许您执行重试并记录任何可能需要的请求信息。

安装

此库使用Composer来管理其依赖项。因此,在开始使用之前,请确保您已经在您的计算机上安装了它。一旦完成,您就可以在终端中键入以下命令来拉取此库。

composer require gocanto/http-client

背后的原因

有时您可能需要根据某些原因重新尝试HTTP请求。这可能是因为延迟问题或某些超时错误。

为了避免这些中断,我们通常在一个循环中执行重试操作。然后,我们要么因为有一个有效的响应要返回而退出循环,要么因为我们需要处理可能出现的错误。

因此,我创建了这个小包装来处理重试操作,并在同一操作中记录我们的请求/响应有效载荷。

它是如何工作的?

此客户端的工作方式与您习惯的方式完全相同。您将能够调用任何已知的Guzzle方法,并将重试操作附加到它们。

比如说,您需要执行某些HTTP请求以填充您的数据库中的数据。为此,您必须编写类似以下代码的代码。

use GuzzleHttp\Client;

$response = (new Client)->get('http://foo.com'); 

这是一个我们都曾遇到过的简单用例。但是,如果发生错误并且您需要进行重试,您会怎么做呢?

好吧,如果您像我一样,您会这样做

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$retry = 1;
$response = null;

do {
    try {
        $response = (new Client)->get('http://foo.com');
    } catch (RequestException $e) {
        $retry++;
    }
} while ($response === null && $retry <= 5);

那里有一段可以工作的代码,但是您每次需要执行某种类型的HTTP请求时,都必须执行相同的程序。

我们可以做得更好!

通过使用此包中提供的HTTP客户端,您可以在同一HTTP调用中调用重试机制。例如:

use Gocanto\HttpClient\HttpClient;
use GuzzleHttp\Exception\RequestException;

try {
    $response = (new HttpClient)->retry(5)->get('http://foo.com'); 
} catch (RequestException $e) {
    //you need to still handle errors here!
}

这一行代码与上面的代码完全一样,但更高效、更优雅。此库还提供了一个不同的方法onRetry(),它执行相同的重试,但还提供了钩入重试调用的能力。

您可以使用它如下所示

use Gocanto\HttpClient\HttpClient;
use GuzzleHttp\Exception\RequestException;

try {
    $response = (new HttpClient)->onRetry(function () {})->get('http://foo.com'); 
} catch (RequestException $e) {
    //you need to still handle errors here!
}

在这里,您将获得在那个特定时刻正在处理的传入请求和响应。 查看更多

按需头部

有时,我们需要根据动态数据向给定的客户端实例添加头部。

这种需求在创建阶段不可能实现,因为我们不知道我们会处理什么信息。因此,我们需要一种机制来在需要时钩入并填充这些数据。

客户端通过with Headers支持此功能,允许在需要时按需提供头部值。

例如,您可以这样做

$client = new HttpClient;

$client->withHeaders([
      'X-GUS-1' => 'testing testing',
      'X-GUS-2' => 'testing testing',
      'X-GUS-3' => 'testing testing',
      'X-GUS-4' => 'testing testing',
])->request('GET', 'https://foo.com');

根据需要添加尽可能多的标题。

贡献

请随意fork这个包,并通过提交pull request来增强其功能进行贡献。

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。

我该如何感谢你呢?

有很多方式你可以支持我的开源工作。没有一种选择是正确的,所以选择权在你。

不过😄,我建议以下几种

  • ⬆️ 关注我的Twitter
  • ⭐ 给仓库点star。
  • 🤝 提交一个pull request来修复/改进代码库。
  • ✍️ 提交一个pull request来改进文档。
  • ☕ 购买一杯咖啡

感谢你阅读到这里。😊