首頁 >後端開發 >php教程 >PHP實現百度文心一言介面的流量監控與防止惡意請求方案

PHP實現百度文心一言介面的流量監控與防止惡意請求方案

PHPz
PHPz原創
2023-08-26 15:48:23968瀏覽

PHP實現百度文心一言介面的流量監控與防止惡意請求方案

PHP實作百度文心一言介面的流量監控和防止惡意請求方案

一言介面是百度提供的一個非常受歡迎的API,透過調用這個介面可以獲得一句隨機的文心一言。然而,在實際應用中,由於介面的存取量很大,可能會面臨流量過大甚至惡意請求的問題。本文將介紹如何使用PHP來實現這個介面的流量監控和防止惡意請求方案。

首先,我們需要在自己的伺服器上部署一個PHP腳本來作為中間件,接收客戶端的請求並呼叫百度文心一言的介面。以下是一個簡單的範例程式碼:

<?php
function getOneWord() {
    $url = 'https://api.gushi.ci/all.json';
    $data = file_get_contents($url);
    $result = json_decode($data, true);

    return $result['content'];
}

// 检查IP是否被限制访问(60秒最多访问100次)
function checkIP() {
    $ip = $_SERVER['REMOTE_ADDR'];
    $file = './ip.txt';
    $time = time();

    $lines = file($file);

    // 删除过期的记录
    foreach ($lines as $key => $line) {
        $record = explode(',', $line);

        if ($time - $record[0] > 60) {
            unset($lines[$key]);
        }
    }

    file_put_contents($file, implode($lines));

    // 统计当前IP的请求次数
    $count = 0;
    foreach ($lines as $line) {
        $record = explode(',', $line);

        if ($record[1] == $ip) {
            $count++;
        }
    }

    // 超过限制次数
    if ($count >= 100) {
        return false;
    }

    // 添加新的请求记录
    file_put_contents($file, $time . ',' . $ip . PHP_EOL, FILE_APPEND);

    return true;
}

// 允许跨域访问
header('Access-Control-Allow-Origin: *');

// 检查IP是否被限制访问
if (!checkIP()) {
    die('请求过于频繁,请稍后再试!');
}

// 调用百度文心一言接口
$oneWord = getOneWord();

// 返回结果
echo $oneWord;
?>

在上述程式碼中,我們首先編寫了getOneWord()函數,用於呼叫百度文心一言介面並傳回一句文心一言。然後,checkIP()函數用來檢查客戶端的IP位址是否超過了存取頻率限制。這裡我們將IP位址記錄在一個文字檔案中,並且定期清除過期的記錄。如果某個IP位址的請求次數超過了限制(60秒內最多存取100次),則傳回錯誤訊息,否則新增新的請求記錄。

接下來,我們在PHP腳本的開頭添加了header('Access-Control-Allow-Origin: *'),這是為了允許跨域訪問,方便客戶端調用該接口。最後,我們根據呼叫結果傳回對應的內容。

要想測試這個方案的效果,可以將上述程式碼儲存為PHP文件,然後在瀏覽器中存取這個文件,即可取得到一句文心一言。為了模擬並發請求,可以使用多個瀏覽器視窗或工具來同時存取這個接口,觀察是否會收到請求過於頻繁的錯誤提示。

透過上述方案,我們實現了百度文心一言介面的流量監控和防止惡意請求的功能。可根據需要對存取頻率限制進行調整,以適應實際的請求量。同時,我們也為該介面添加了跨域存取的支持,方便客戶端呼叫。這種方式的優點在於使用簡單,成本較低,能夠有效地保護介面不被濫用。

希望上述內容對你有幫助,祝您的專案順利!

以上是PHP實現百度文心一言介面的流量監控與防止惡意請求方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn