- 113浏览
- 2022-06-01
<?php
// 设置防采集的规则
$userAgentList = array(
"Googlebot",
"Baiduspider",
"360Spider",
"Sogou web spider",
"bingbot",
"Yahoo! Slurp"
);
// 检查用户代理是否符合防采集规则
function checkUserAgent() {
global $userAgentList;
$userAgent = $_SERVER['HTTP_USER_AGENT'];
foreach($userAgentList as $agent) {
if (stripos($userAgent, $agent) !== false) {
return true; // 用户代理匹配防采集规则,可能是爬虫
}
}
return false; // 用户代理未匹配防采集规则
}
// 检查来源是否为搜索引擎
function checkReferrer() {
$referrer = $_SERVER['HTTP_REFERER'];
if (!empty($referrer)) {
$hostname = parse_url($referrer, PHP_URL_HOST);
$refererArr = array(
'google.com',
'baidu.com',
'sogou.com',
'bing.com',
'yahoo.com'
);
foreach ($refererArr as $referrer) {
if (stripos($hostname, $referrer) !== false) {
return true; // 来源匹配防采集规则,可能是搜索引擎
}
}
}
return false; // 来源未匹配防采集规则
}
// 检查访问频率
function checkAccessFrequency() {
$accessTimes = 3; // 允许的访问次数
$accessExpire = 10; // 访问限制时间(秒)
$ip = $_SERVER['REMOTE_ADDR'];
$key = 'access_frequency_' . $ip;
$accessCount = intval(apc_fetch($key));
if ($accessCount >= $accessTimes) {
return false; // 超过访问次数限制
} else {
apc_inc($key, 1, $accessExpire);
return true; // 未超过访问次数限制
}
}
// 执行防采集逻辑判断
function preventCollect() {
if (checkUserAgent() || checkReferrer() || !checkAccessFrequency()) {
header('HTTP/1.1 403 Forbidden');
echo "Access Forbidden";
exit();
}
}
// 调用防采集方法
preventCollect();
?>
此代码示例包括三个函数:
checkUserAgent:检查用户代理是否匹配防采集规则,判断是否为爬虫。
checkReferrer:检查来源是否匹配防采集规则,判断是否为搜索引擎。
checkAccessFrequency:检查访问频率是否超过限制。
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、本文由会员转载自互联网,如果您是文章原创作者,请联系本站注明您的版权信息。