2

有没有办法检测页面是否被机器人访问?

我尝试检查$_SERVER['HTTP_USER_AGENT']是否在数组中。它工作正常。

$bot = array("Slurp", "Scooter", "URL_Spider_SQL", "Googlebot", "Firefly", "WebBug", "WebFindBot", "crawler",  "appie", "msnbot", "InfoSeek", "FAST", "Spade", "NationalDirectory",);

if (in_array($_SERVER['HTTP_USER_AGENT'], $bot)) {
    return true;
}
else {
return false;
}

有没有更好更安全的方法来做到这一点?(除了必须输入所有机器人名称之外?)我的方法和这个有什么区别?

4

2 回答 2

2

好吧,在谷歌内部进行了一些挖掘之后,我发现了这个。

$agent = strpos(strtolower($_SERVER['HTTP_USER_AGENT']));
foreach($bots as $name => $bot)
{
    if(stripos($agent,$bot)!==false)
    {
        return true;
    }
    else {
        return false;
    }
}

感谢戴尔的支持!!

于 2012-11-30T10:46:42.853 回答
0

看着 Sid 的答案,并在谷歌上搜索我在这个网站上发现了其他检测方式。看:

function detect_is_bot () {
    $bots = array("Slurp", "Scooter", "URL_Spider_SQL", "Googlebot", "Firefly", "WebBug", "WebFindBot", "crawler",  "appie", "msnbot", "InfoSeek", "FAST", "Spade", "NationalDirectory",);
    $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
    foreach($bots as $bot) {
        if(stripos($agent,$bot)!==false) {return true;}
    }
    return false;
}
于 2013-09-16T22:37:31.683 回答