现在很多大型网站(像FB,TWITTER)都 提供 API接口.一般返回格式是JSON. 一般会限制每IP地址访问的频率 比如每小时 600次调用等等.
如果你想提供一个API 但是计算又挺耗时的不想用户频繁的调用,可以通过记录上次调用时间来限制,比如:
1 2 3 | $data = "Data Returned from API"; header('Content-Type: application/json'); die(json_encode($data)); |
$data = "Data Returned from API"; header('Content-Type: application/json'); die(json_encode($data));
然后我们就可以在 session 中记录时间来判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | session_start(); if (isset($_SESSION['LAST_CALL'])) { $last = strtotime($_SESSION['LAST_CALL']); $curr = strtotime(date("Y-m-d h:i:s")); $sec = abs($last - $curr); if ($sec < = 1) { $data = 'Rate Limit Exceeded'; // 调用太频繁了 header('Content-Type: application/json'); die (json_encode($data)); } } $_SESSION['LAST_CALL'] = date("Y-m-d h:i:s"); // 正常使用 $data = "Data Returned from API"; header('Content-Type: application/json'); die(json_encode($data)); |
session_start(); if (isset($_SESSION['LAST_CALL'])) { $last = strtotime($_SESSION['LAST_CALL']); $curr = strtotime(date("Y-m-d h:i:s")); $sec = abs($last - $curr); if ($sec < = 1) { $data = 'Rate Limit Exceeded'; // 调用太频繁了 header('Content-Type: application/json'); die (json_encode($data)); } } $_SESSION['LAST_CALL'] = date("Y-m-d h:i:s"); // 正常使用 $data = "Data Returned from API"; header('Content-Type: application/json'); die(json_encode($data));
建议把上面的代码 提取到外面单独的一个PHP头文件中然后 放在每个API调用的文件开始 (因为需要初始化 session_start())
1 | require_once('rate.php'); |
require_once('rate.php');
英文:Easy Rate Limit in PHP using Simple Strategy – An API Example
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK