gocanto / http-client
处理重试、日志和动态头部的HTTP客户端。
Requires
- php: ^8.0|^8.1|8.2
- guzzlehttp/guzzle: ^7.5
- psr/http-message: ^1.0
Requires (Dev)
- ergebnis/composer-normalize: ^2.29
- friendsofphp/php-cs-fixer: ^3.13
- mockery/mockery: ^1.5
- phpunit/phpunit: ^9.4
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-09-04 04:08:07 UTC
README
此库是著名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)。请参阅许可证文件获取更多信息。
我该如何感谢你呢?
有很多方式你可以支持我的开源工作。没有一种选择是正确的,所以选择权在你。
不过😄,我建议以下几种
感谢你阅读到这里。😊