php接口频率限制,PHP中的Lumen框架限制接口访问频率

Laravel 5.2的新特性增加了一个限制访问频率的中间件throttle,通过它可以在路由层限制API访问的频率。例如限制频率1分钟50次,如果一分钟内超过了这个限制,Laravel就会响应:429: Too Many Attempts。但很遗憾这个特性在Lumen框架没有加入,所以本文主要是教你在Lumen框架中加入throttle中间件。

throttle中间件在\Illuminate\Routing\Middleware\ThrottleRequests,你可以从Laravel 5.2以上的版本获取,当然也可以在github的illuminate/routing项目获取,这里我们取最新版本的代码。

地址:https://github.com/illuminate/routing/blob/master/Middleware/ThrottleRequests.php

把文件复制到app/Http/Middleware文件夹,修改命名空间。

namespace App\Http\Middleware;

还有几问题,在lumen框架是没有的,我们需要再改造一下。

标记同一用户端请求

ThrottleRequests.php文件里的resolveRequestSignature方法,Lumen框架缺少相应的功能,我们需要改造一下,自己定义一下标记同一用户端的请求,修改文件:

protected function resolveRequestSignature($request){ return sha1( $request->method() . '|' . $request->server('SERVER_NAME') . '|' . $request->path() . '|' . $request->ip() );}

抛出相应

Throttle超过限制的次数抛出的是Illuminate\Http\Exceptions\ThrottleRequestsException,Lumen框架缺少该异常相应的文件,同样我们需要自己定义,可以参考该源文件:

地址:https://github.com/illuminate/http/blob/master/Exceptions/ThrottleRequestsException.php

新建app/ExceptionsThrottleException.php文件,复制以下代码:

<?phpnamespace App\Exceptions;use Exception;class ThrottleException extends Exception{ protected $isReport = false; public function isReport() { return $this->isReport; }}

在 app/Exceptions/Handler.php捕获该抛出异常,在render方法增加以下判断:

if ($e instanceof ThrottleException) { return response(['code' => $e->getCode(), 'msg' => $e->getMessage()], 429);}

修改ThrottleRequests.php的抛出:

throw new ThrottleException('Too Many Attempts.', 429);

注册中间件

在bootstrap/app.php注册:

$app->routeMiddleware([ 'throttle' => App\Http\Middleware\ThrottleRequests::class,]);

至此我们就改造完成了,接下来就是使用了,方法很简单,在路由层添加'middleware' => 'throttle:5'定义就可以了。具体的可以参考以下链接。

http://laravelacademy.org/post/3566.html

9982fd8af1c733113ffa899be13246da.png

本文仅代表作者个人观点,不代表SEO研究协会网官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱cxb5918@163.com。更多相关资讯,请到SEO研究协会网www.seoxiehui.cn学习互联网营销技术请到巨推学院www.jutuiedu.com。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值