Php 在Laravel中禁用速率限制器?
是否有办法在Laravel的每条/每条路线上禁用速率限制Php 在Laravel中禁用速率限制器?,php,laravel,Php,Laravel,是否有办法在Laravel的每条/每条路线上禁用速率限制 我正在尝试测试一个接收大量请求的端点,但是随机的Laravel将开始响应{status:429,responseText:“尝试太多了”。}对于几百个请求,这使得测试非常痛苦。在app/Http/Kernel.phpLaravel对所有api路由都有一个默认的限制 protected $middlewareGroups = [ ... 'api' => [ 'throttle:60,1', ]
我正在尝试测试一个接收大量请求的端点,但是随机的Laravel将开始响应
{status:429,responseText:“尝试太多了”。}
对于几百个请求,这使得测试非常痛苦。在app/Http/Kernel.php
Laravel对所有api路由都有一个默认的限制
protected $middlewareGroups = [
...
'api' => [
'throttle:60,1',
],
];
评论或增加它 假设您使用的是API路由,那么您可以在app/Http/Kernel.php中更改节流阀或完全关闭它。如果需要限制其他路由,可以分别为它们注册中间件 (以下示例:油门-尝试60次,然后锁定1分钟)
如果只想禁用自动测试,可以在测试中使用
WithoutMiddleware
特性
use Illuminate\Foundation\Testing\WithoutMiddleware;
class YourTest extends TestCase {
use WithoutMiddleware;
...
否则,只需从内核文件(app/Http/Kernel.php
)中删除'throttle:60,1',
行,您的问题就会得到解决。您实际上只能在测试中禁用某个中间件
use Illuminate\Routing\Middleware\ThrottleRequests;
class YourTest extends TestCase
{
protected function setUp()
{
parent::setUp();
$this->withoutMiddleware(
ThrottleRequests::class
);
}
...
}
在拉威尔5.7
动态速率限制
您可以根据经过身份验证的用户模型的属性指定动态请求最大值。例如,如果您的用户模型包含rate_limit属性,则可以将该属性的名称传递给throttle中间件,以便用于计算最大请求计数:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
在单元测试中增加油门以避免可怕的429:
您可以在
app/Http/Kernel.php
'api' => [
'throttle:120,1',
'bindings',
\App\Library\Cobalt\Http\Middleware\LogMiddleware::class,
],
如果问题仍然存在,请尝试artisan命令
php artisan cache:clear
您可以使用cache:clear
命令清除缓存,包括速率限制,如下所示:
php artisan cache:clear
如果我评论是不是意味着没有限制?正确。注释掉意味着没有限制。除非您的应用程序逻辑有更改限制的特定原因,否则这种方法是非常不明智的。如果要关闭测试的限制,请使用:
$this->withoutMiddleware()->get($url,$data)代码>。注释出来并不意味着对我最近的睾丸没有限制。一旦达到限制,有办法重置油门吗?我将系统日期改为提前2个月进行测试,现在“重试后”响应HTTP头指示我必须等待2个月才能访问API路由。这应该是可以接受的答案,因为这是测试类似内容的正确方法。全局禁用油门限制不是一个好的做法。Laravel 5.5+要求我在Laravel 5.4中尝试了它,但由于某些原因,它使用了我输入的值的一半。运行该命令对我有效
<server name="REQUESTS_PER_MINUTE" value="500"/>
'api' => [
'throttle:120,1',
'bindings',
\App\Library\Cobalt\Http\Middleware\LogMiddleware::class,
],
php artisan cache:clear