PHP melaksanakan pemantauan lalu lintas dan penyelesaian pencegahan permintaan jahat antara muka Baidu Wenxin Yiyan
Antara muka Yiyan ialah API yang sangat popular yang disediakan oleh Baidu Dengan memanggil antara muka ini, anda boleh mendapatkan Wenxin Yiyan secara rawak. Walau bagaimanapun, dalam aplikasi sebenar, disebabkan bilangan akses yang besar kepada antara muka, ia mungkin menghadapi masalah trafik yang berlebihan atau permintaan yang berniat jahat. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan pemantauan trafik dan mencegah permintaan berniat jahat untuk antara muka ini.
Pertama, kami perlu menggunakan skrip PHP pada pelayan kami sendiri sebagai perisian tengah untuk menerima permintaan pelanggan dan memanggil antara muka Baidu Wenxinyiyan. Berikut ialah contoh kod mudah:
<?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; ?>
Dalam kod di atas, kami mula-mula menulis fungsi getOneWord()
, yang digunakan untuk memanggil antara muka Baidu Wenxin Yiyan dan mengembalikan ayat Wenxin Yiyan. Kemudian, fungsi checkIP()
digunakan untuk menyemak sama ada alamat IP pelanggan melebihi had kekerapan akses. Di sini kami merekodkan alamat IP dalam fail teks dan mengosongkan rekod tamat tempoh secara berkala. Jika bilangan permintaan untuk alamat IP tertentu melebihi had (sehingga 100 lawatan dalam masa 60 saat), mesej ralat akan dikembalikan, jika tidak, rekod permintaan baharu akan ditambah. getOneWord()
函数,用于调用百度文心一言接口并返回一句文心一言。然后,checkIP()
函数用来检查客户端的IP地址是否超过了访问频率限制。这里我们将IP地址记录在一个文本文件中,并定期清除过期的记录。如果某个IP地址的请求次数超过了限制(60秒内最多访问100次),则返回错误信息,否则添加新的请求记录。
接下来,我们在PHP脚本的开头添加了header('Access-Control-Allow-Origin: *')
header('Access-Control-Allow-Origin: *')
pada permulaan skrip PHP Ini adalah untuk membenarkan akses merentas domain dan memudahkan pelanggan memanggil antara muka. Akhir sekali, kami mengembalikan kandungan yang sepadan berdasarkan hasil panggilan. Untuk menguji kesan penyelesaian ini, anda boleh menyimpan kod di atas sebagai fail PHP, dan kemudian mengakses fail ini dalam penyemak imbas untuk mendapatkan ayat teks. Untuk mensimulasikan permintaan serentak, anda boleh menggunakan berbilang tetingkap atau alatan penyemak imbas untuk mengakses antara muka ini pada masa yang sama dan memerhati sama ada anda menerima mesej ralat yang menunjukkan bahawa permintaan adalah terlalu kerap. Melalui penyelesaian di atas, kami telah melaksanakan pemantauan lalu lintas dan pencegahan fungsi permintaan berniat jahat antara muka Baidu Wenxin Yiyan. Had kekerapan akses boleh dilaraskan mengikut keperluan untuk menampung volum permintaan sebenar. Pada masa yang sama, kami juga telah menambah sokongan untuk akses merentas domain kepada antara muka ini untuk memudahkan panggilan pelanggan. Kelebihan kaedah ini ialah ia mudah digunakan, kos rendah dan berkesan boleh melindungi antara muka daripada disalahgunakan. Saya harap kandungan di atas akan membantu anda, dan saya ucapkan selamat maju jaya dengan projek anda! 🎜Atas ialah kandungan terperinci PHP melaksanakan pemantauan trafik antara muka Baidu Wenxin Yiyan dan penyelesaian pencegahan permintaan berniat jahat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!