antelucangizmos/guzzle-retry-handler

测试支持重试的Guzzle客户端

0.1.2 2024-06-19 20:45 UTC

This package is auto-updated.

Last update: 2024-09-19 21:24:15 UTC


README

Shields Shields

API可能实现速率限制,如果它们这样做,您的客户端可能会收到带有Retry-After头的429 Too Many Requests响应,告知您的客户端在发出下一个请求之前应等待多长时间。

Guzzle 包含一个 重试中间件 类,可用于处理此问题。

本项目的实现是一个PoC,因此您可以在此基础上构建,如果认为应该添加或删除某些内容,请发表评论。

示例用法

require dirname(__DIR__, 2) . '/vendor/autoload.php';

use Ag\Guzzle\Handler\Retry;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ConnectException;
use GuzzleHttp\Handler\CurlHandler;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Middleware;

class TestRetry
{
    public function test(int $maxRetries = 5)
    {
        $handlerStack = HandlerStack::create(new CurlHandler());
        $retry = new Retry($maxRetries);
        $handlerStack->push(Middleware::retry($retry->retryDecider(), $retry->retryDelay()));

        $client = new Client(array('handler' => $handlerStack));

        $response = $client->request(
            'GET',
            // @ToDo replace to a real url!!!
            'https://some-url-here'
        )->getBody()->getContents();

        return print_r($response, true);
    }
}

try {
    $TestRetry = new TestRetry();
    $response = $TestRetry->test(5);
    echo $response . PHP_EOL;
} catch (ConnectException $e) {
    echo $e->getMessage() . PHP_EOL;
}