hamburgscleanest/laravel-guzzle-throttle

为 https://github.com/hamburgscleanest/guzzle-advanced-throttle 提供的 Laravel 封装。

此包的官方仓库似乎已不存在,因此该包已被冻结。


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

A Laravel (>= 8.0) 对 Guzzle Advanced Throttle 的封装。

安装

通过 Composer

composer require hamburgscleanest/laravel-guzzle-throttle

自动包发现

所有内容都将自动为您注册。

配置

发布配置以获取示例配置。

php artisan vendor:publish

示例配置

20 每秒 1 个请求

100 每两分钟 1 个请求

    return [
        'cache' => [
            // Name of the configured driver in the Laravel cache config file / Also needs to be set when "no-cache" is set! Because it's used for the internal timers
            'driver'   => 'default',
            // Cache strategy: no-cache, cache, force-cache
            'strategy' => 'cache',
            // TTL in minutes
            'ttl'      => 900,
            // When this is set to false, empty responses won't be cached.
            'allow_empty' => true
        ],
        'rules' => [
            // host (including scheme)
            'https://www.google.com' => [
                [
                    // maximum number of requests in the given interval
                    'max_requests'     => 20,
                    // interval in seconds till the limit is reset
                    'request_interval' => 1
                ],
                [
                // maximum number of requests in the given interval
                'max_requests'     => 100,
                // interval in seconds till the limit is reset
                'request_interval' => 120
                ]
            ]
        ]
    ];

使用方法

要使用预配置的客户端,您必须像这样实例化您的客户端

// returns an instance of GuzzleHttp\Client
$client = LaravelGuzzleThrottle::client(['base_uri' => 'https://www.google.com']);

之后,您可以使用所有常规的 GuzzleHttp\Client 方法,例如

$client->get('/test'));

添加其他中间件

您还可以将其他中间件添加到堆栈中。
像往常一样定义您的堆栈,然后将其传递给限流客户端

$stack = HandlerStack::create(new CurlHandler());
$stack->push(some_other_middleware);

$client = LaravelGuzzleThrottle::client(['base_uri' => 'https://www.google.com', 'handler' => $stack]);

客户端将“自动”将每个其他中间件添加到堆栈的顶部。

缓存

预先

状态码为 4xx5xx 的响应不会被缓存(即使启用了 force-cache)!注意:此外,3xx 重定向代码也不会被缓存。

支持的驱动器

以下驱动器被官方支持: 文件RedisMemcached

驱动器的配置可以在 中间件仓库 中查看。

选项

无缓存 - no-cache

仅限流请求,不缓存它们。当超出限制时,会抛出 429 - Too Many Requests 异常。

有缓存(默认)- cache

当您定义的速率限制超过时,使用缓存的响应。中间件尝试在抛出 429 - Too Many Requests 异常之前回退到缓存的响应。

强制缓存 - force-cache

始终在可用时使用缓存的响应以节省您的速率限制。只有在未缓存时才发送请求。如果没有缓存的响应且请求限制超出,它将回退到抛出 429 - Too Many Requests 异常。

通配符

如果您想为多个不同的主机定义相同的规则,可以使用通配符。一个可能的用例是子域名

$rules = new RequestLimitRuleset([
        'https://www.{subdomain}.mysite.com' => [
            [
                'max_requests'     => 50,
                'request_interval' => 2
            ]
        ]
    ]);

host 匹配 https://www.en.mysite.comhttps://www.de.mysite.comhttps://www.fr.mysite.com,等等。

更多详细信息

有关可能的配置的更多详细信息,请访问中间件仓库: Guzzle Advanced Throttle

更改

请参阅 CHANGELOG 了解最近更改的详细信息。

测试

composer test

贡献

请参阅贡献指南行为准则以获取详细信息。

安全

如果您发现任何安全相关的问题,请通过chroma91@gmail.com发送电子邮件,而不是使用问题跟踪器。

致谢

许可证

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