You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitfinex API请求控制:PHP脚本每90次查询暂停60秒

实现Bitfinex API请求限流:每90次查询后暂停60秒

看起来你已经在处理Bitfinex API的数据拉取和入库操作了,现在需要加上限流逻辑来避免触发IP封禁。根据Bitfinex的规则,每分钟最多允许90次REST请求,否则IP会被临时封禁10-60秒,所以我们可以通过维护请求计数器+阈值暂停的方式解决这个问题。

核心实现思路

  • 用计数器跟踪已发起的请求次数
  • 每次发起API请求前做检查:
    • 若计数达到90次,先让脚本暂停60秒,再重置计数器
    • 若未达阈值,直接发起请求,请求完成后计数器加1

修改后的完整代码示例

<?php
// 用静态变量保持脚本执行期间的请求计数状态
static $requestCount = 0;

// 触发限流逻辑:达到90次请求后暂停60秒
if ($requestCount >= 90) {
    echo "已达请求上限,暂停60秒规避封禁...\n";
    sleep(60);
    $requestCount = 0; // 重置计数
}

// 发起Bitfinex API请求
$json = file_get_contents('https://api.bitfinex.com/v1/symbols');
// 处理请求失败的情况
if ($json === false) {
    die("API请求失败,请检查网络连接或API状态");
}

// 解析JSON数据
$bitfinex = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("JSON解析失败:" . json_last_error_msg());
}

// 补全你的入库逻辑(这里假设你需要拆分交易对存入数据库)
$insertBitfinex = $this->conn->prepare("INSERT INTO exchange_bitfinex (`first_coin`,`second_coin`) VALUES (?, ?)");
foreach ($bitfinex as $symbol) {
    // 拆分Bitfinex的交易对格式(比如btcusd拆为BTC和USD)
    $firstCoin = strtoupper(substr($symbol, 0, 3));
    $secondCoin = strtoupper(substr($symbol, 3));
    $insertBitfinex->bind_param("ss", $firstCoin, $secondCoin);
    $insertBitfinex->execute();
}

// 请求完成后计数加1
$requestCount++;
?>

额外注意事项

  • 如果你的脚本是定时重复执行的(比如 cron 任务),静态变量的计数会在每次脚本启动时重置,这种情况可以用文件、数据库或缓存(如Redis)来持久化计数器,确保跨执行周期的计数准确。
  • file_get_contents 依赖PHP的 allow_url_fopen 配置,若环境限制无法开启,建议改用cURL实现请求,更稳定且方便设置超时、请求头等参数。
  • 实际使用时可以把暂停时间调整为61秒,完全覆盖每分钟的限制窗口,进一步降低封禁风险。

内容的提问来源于stack exchange,提问作者major697

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:00:55