fyre / ratelimiter
一个速率限制库。
v1.0
2024-08-18 05:29 UTC
Requires
- fyre/cache: ^3.0
- fyre/middleware: ^2.0
- fyre/server: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.59
- fyre/php-cs-fixer-config: ^1.0
- phpunit/phpunit: ^10
README
FyreRateLimiter 是一个免费的、开源的 PHP 速率限制库。
目录
安装
使用 Composer
composer require fyre/ratelimiter
在 PHP 中
use Fyre\Security\RateLimiter;
速率限制器创建
$options
是一个数组,包含 RateLimiter 的选项。cacheConfig
是一个字符串,表示 Cache 的配置键,默认为 "ratelimiter"。limit
是一个数字,表示在周期内的最大请求数量,默认为 60。period
是一个数字,表示每个速率限制周期的秒数,默认为 60。message
是一个字符串,表示速率限制错误消息,默认为 "Rate limit exceeded"。headers
是一个包含速率限制头的数组。limit
是一个字符串,表示速率限制头,默认为 "X-RateLimit-Limit"。remaining
是一个字符串,表示剩余速率限制头,默认为 "X-RateLimit-Remaining"。reset
是一个字符串,表示重置速率限制头,默认为 "X-RateLimit-Reset"。
identifier
是一个接受 ServerRequest 作为第一个参数的 Closure,应该返回一个表示客户端标识符的字符串。skipCheck
是一个接受 ServerRequest 作为第一个参数的 Closure,可以返回 true 以跳过对请求的速率限制检查。errorResponse
是一个接受 ServerRequest 和 ClientResponse 作为参数的 Closure,应该返回一个 ClientResponse。
$limiter = new RateLimiter($options);
如果省略了 identifier
回调,它将默认使用 $_SERVER['REMOTE_ADDR']
。
如果省略了 errorResponse
回调,它将默认协商包含 message
选项的 json 或纯文本响应。
方法
添加头
向 ClientResponse 添加速率限制头。
$response
是一个 ClientResponse。
$response = $limiter->addHeaders($response);
检查限制
检查速率限制。
$request
是 ServerRequest。
$result = $limiter->checkLimit($request);
错误响应
生成错误响应。
$request
是 ServerRequest。
$response = $limiter->errorResponse($request);
中间件
use Fyre\Security\Middleware\RateLimiterMiddleware;
$options
是一个数组,包含 RateLimiter 的选项。cacheConfig
是一个字符串,表示 Cache 的配置键,默认为 "ratelimiter"。limit
是一个数字,表示在周期内的最大请求数量,默认为 60。period
是一个数字,表示每个速率限制周期的秒数,默认为 60。message
是一个字符串,表示速率限制错误消息,默认为 "Rate limit exceeded"。headers
是一个包含速率限制头的数组。limit
是一个字符串,表示速率限制头,默认为 "X-RateLimit-Limit"。remaining
是一个字符串,表示剩余速率限制头,默认为 "X-RateLimit-Remaining"。reset
是一个字符串,表示重置速率限制头,默认为 "X-RateLimit-Reset"。
identifier
是一个接受 ServerRequest 作为第一个参数的 Closure,应该返回一个表示客户端标识符的字符串。skipCheck
是一个接受 ServerRequest 作为第一个参数的 Closure,可以返回 true 以跳过对请求的速率限制检查。errorResponse
是一个接受 ServerRequest 和 ClientResponse 作为参数的 Closure,应该返回一个 ClientResponse。
$middleware = new RateLimiterMiddleware($options);
如果省略了 identifier
回调,它将默认使用 $_SERVER['REMOTE_ADDR']
。
如果省略了 errorResponse
回调,它将默认协商包含 message
选项的 json 或纯文本响应。
处理
$request
是 ServerRequest。$handler
是 RequestHandler。
$response = $middleware->process($request, $handler);
此方法将返回一个 ClientResponse。