有没有一种方法可以禁用Laravel中每条/每条路线的速率限制?
我正在尝试测试接收到大量请求的端点,但是随机Laravel将开始响应{ status: 429, responseText: 'Too Many Attempts.' }
数百个请求,这使得测试非常痛苦。
Answers:
在app/Http/Kernel.php
Laravel中,所有api路径都有默认的油门限制。
protected $middlewareGroups = [
...
'api' => [
'throttle:60,1',
],
];
评论或增加它。
$this->withoutMiddleware()->get($url, $data);
。
实际上,您只能在测试中禁用某些中间件。
use Illuminate\Routing\Middleware\ThrottleRequests;
class YourTest extends TestCase
{
protected function setUp()
{
parent::setUp();
$this->withoutMiddleware(
ThrottleRequests::class
);
}
...
}
在Laravel 5.7中
动态速率限制 您可以根据已验证的用户模型的属性指定最大动态请求。例如,如果您的用户模型包含rate_limit属性,则可以将该属性的名称传递给节流中间件,以便用于计算最大请求数:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
您可以使用cache:clear
命令清除缓存,包括速率限制,如下所示:
php artisan cache:clear
一种避免在单元测试中增加油门以避免429可怕的方法:
$requestsPerMinute = ENV("REQUESTS_PER_MINUTE", 60);
Route::middleware(["auth:api", "throttle:$requestsPerMinute,1"])->group(function(){
// your routes
});
<server name="REQUESTS_PER_MINUTE" value="500"/>