hamburgscleanest / laravel-guzzle-throttle
为 https://github.com/hamburgscleanest/guzzle-advanced-throttle 提供的 Laravel 封装。
此包的官方仓库似乎已不存在,因此该包已被冻结。
Requires
- php: ^8.0
- hamburgscleanest/guzzle-advanced-throttle: ^5.0.1
- illuminate/support: ^8
Requires (Dev)
- dev-master
- v5.0.0
- v4.1.1
- v4.1.0
- v4.0.2
- v4.0.1
- v4.0.0
- v3.1.0
- v3.0.2
- v3.0.1
- v3.0.0
- v2.1.0
- v2.0.10
- v2.0.9
- v2.0.8
- v2.0.7
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- dev-dependabot/composer/phpunit/phpunit-9.6.4
- dev-dependabot/composer/orchestra/testbench-6.25.1
- dev-dependabot/composer/mockery/mockery-1.5.1
This package is auto-updated.
Last update: 2024-07-28 13:50:12 UTC
README
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]);
客户端将“自动”将每个其他中间件添加到堆栈的顶部。
缓存
预先
状态码为 4xx
或 5xx
的响应不会被缓存(即使启用了 force-cache
)!注意:此外,3xx
重定向代码也不会被缓存。
支持的驱动器
以下驱动器被官方支持: 文件,Redis 和 Memcached。
驱动器的配置可以在 中间件仓库 中查看。
选项
无缓存 - 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.com
,https://www.de.mysite.com
,https://www.fr.mysite.com
,等等。
更多详细信息
有关可能的配置的更多详细信息,请访问中间件仓库: Guzzle Advanced Throttle。
更改
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
composer test
贡献
安全
如果您发现任何安全相关的问题,请通过chroma91@gmail.com发送电子邮件,而不是使用问题跟踪器。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。