Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中禁用速率限制器?_Php_Laravel - Fatal编程技术网

Php 在Laravel中禁用速率限制器?

Php 在Laravel中禁用速率限制器?,php,laravel,Php,Laravel,是否有办法在Laravel的每条/每条路线上禁用速率限制 我正在尝试测试一个接收大量请求的端点,但是随机的Laravel将开始响应{status:429,responseText:“尝试太多了”。}对于几百个请求,这使得测试非常痛苦。在app/Http/Kernel.phpLaravel对所有api路由都有一个默认的限制 protected $middlewareGroups = [ ... 'api' => [ 'throttle:60,1', ]

是否有办法在Laravel的每条/每条路线上禁用速率限制


我正在尝试测试一个接收大量请求的端点,但是随机的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:

  • 从内核文件中间件中移除节流阀:60,1
  • 使用环境变量将节流中间件添加回路由组:
  • 在phpunit.xml中定义更高的REQUESTS_PER_MINUTE环境变量,以便在节流之前在测试环境中允许更多请求
  • 
    
  • (在.env中还定义了新的REQUESTS_PER_MINUTE变量,尽管它会回落到60)

  • 您可以在
    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