好久没写blog了,因为自己的博客项目在自己的服务器上,由于我的升级失误把服务器上的项目删掉了,伤心了好久.
今天天气好了,看到朋友圈的人都出去浪了,让我感觉春天来了,所以,我想写点什么来记录我最近一段时间
学的东西,不在乎学多少.从今天开始,每天一篇lavarel 项目的总结.也算是对得起自己的初衷.
今天就是路由中间件之 throttle 接口限流中间件, 顺便学习个单词 throttle:名词为节流阀,动词为节流的意思.
关于具体的使用 官网手册中有具体说明我就不说了,我的middleware中设置的是 10/1 也就是 每分钟最多10次 但是当
我请求到6时 就不能通过了.
看源码 vendor\laravel\framework\src\Illuminate\Routing\Middleware\ThrottleRequests.php 文件就是在这个地方 对号入座
在改文件下
找到各个方法 写下:
file_put_contents('./123.txt',date('Y-m-d H:i:s',time()).$key."\r\n", FILE_APPEND);
发现每次刷新会出来2行数据;
handle 方法中 resolveRequestSignature首先去解析请求签名 然后 resolveMaxAttempts 解析最大尝试次数
然后再到缓存中去对比之前的 $key 也就是签名 根据传入的$decayMinutes 得出结果,
resolveRequestSignature 再看这个方法
签名的生成 采用的sh1 加密 有用户 就采用用户信息加密 没有采用 ip + 域名加密生成!
throw new RuntimeException(
'Unable to generate the request signature. Route unavailable.'
); 但是这句话 就尴尬了,
api的返回 会用英文的方式抛出异常,看来只能重写这个类了
于是,新建在http下的middleware中 新建ThrottleRequests 然后继承
然后 修改kernel文件! 重新 书写异常抛出!