在FB上分享我的一个页面时,我希望显示不同的内容。问题是,我不想使用og:elements,而是识别FB用户代理。
这是什么?我找不到了。
由于
答案 0 :(得分:103)
要查看用户代理字符串列表,请查找here。截至2015年9月,最常用的是facebookexternalhit/*
和Facebot
。由于您尚未说明您尝试识别用户代理的语言,因此我无法告诉您更多信息。如果您确实想要在PHP中识别Facebook bot,请使用
if (
strpos($_SERVER["HTTP_USER_AGENT"], "facebookexternalhit/") !== false ||
strpos($_SERVER["HTTP_USER_AGENT"], "Facebot") !== false
) {
// it is probably Facebook's bot
}
else {
// that is not Facebook
}
更新:Facebook已将Facebot
添加到其可能的用户代理字符串列表中,因此我更新了我的代码以反映更改。此外,代码现在更容易被未来可能的变化所预测。
答案 1 :(得分:16)
“Facebook的用户代理字符串是facebookexternalhit / 1.1(+ http://www.facebook.com/externalhit_uatext.php)...”
您好
小但重要的纠正 - > Facebook外部命中使用2个不同的用户代理:
facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
仅将fitler设置为1.1可能会导致1.0版本的过滤问题。
有关Facebook Bot(以及其他机器人)的更多信息,请参阅Botopedia.org - 由Incapsula提供支持的社区来源机器人目录。
除了用户代理数据外,该目录还提供IP验证选项,允许您交叉验证IP /用户代理,从而有助于防止模拟尝试。
答案 2 :(得分:14)
以下是Facebook抓取工具用户代理:
FacebookExternalHit/1.1
FacebookExternalHit/1.0
或
facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
请注意,版本号可能会更改。因此,使用正则表达式查找爬虫名称,然后显示您的内容。
更新:
您可以在PHP中使用此代码来检查Facebook用户代理
if(preg_match('/^FacebookExternalHit\/.*?/i',$agent)){
print "Facebook User-Agent";
// process here for Facebook
}
这是ASP.NET代码。您可以使用此功能检查userAgent是否是Facebook的使用者。
public static bool IsFacebook(string userAgent)
{
userAgent = userAgent.ToLower();
return userAgent.Contains("facebookexternalhit");
}
注意:
你为什么要这样做?当您在Facebook上共享指向您网站的链接时,Facebook会对其进行抓取并对其进行解析,以获取一些数据以显示您网页上的缩略图,标题和部分内容,但它会链接回您的网站。
此外,我认为这会导致隐藏网站,即向用户和抓取工具显示不同的数据。伪装不被认为是一种好的做法,搜索引擎和网站可能会注意到它。
更新:截至2014年5月28日,Facebook还添加了新的用户
Facebot
您可以在https://developers.facebook.com/docs/sharing/webmasters/crawler
上阅读有关facebook抓取工具的更多信息答案 3 :(得分:4)
请注意有时代理是visionutils/0.2
。你也应该检查一下。
答案 4 :(得分:3)
简短的解决方案是检查模式,而不是每次都将所有混乱加载到用户
<?php
# Facebook optimized stuff
if(strstr($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')) {
$buffer.='<link rel="image_src" href="images/site_thumbnail.png" />';
}
?>
答案 5 :(得分:1)
首先,您不应该使用in_array,因为您需要拥有完整的用户代理而不仅仅是一个子集,因此会快速打破更改(例如,如果您按照当前首选答案,则来自facebook的1.2版本将无效)。迭代数组而不是使用正则表达式模式也比较慢。
毫无疑问你会想要寻找更多机器人,所以我给出了下面的例子,其中2个机器人名称与管道分开。符号。最后的/ i使它不区分大小写。
另外你不应该使用$ _SERVER ['HTTP_USER_AGENT'];但你应该首先过滤它,因为有人在那里存在一些令人讨厌的东西。
$pattern = '/(FacebookExternalHit|GoogleBot)/i';
$agent = filter_input(INPUT_SERVER, 'HTTP_USER_AGENT', FILTER_SANITIZE_ENCODED);
if(preg_match($pattern,$agent)){
echo "found one of the patters";
}
更安全,更快速的代码。
答案 6 :(得分:1)
如果你想阻止facebook bot访问你的网站(假设你正在使用Apache),请将其添加到你的.htaccess
文件中:
<Limit GET POST>
BrowserMatchNoCase "Feedfetcher-Google" feedfetcher
BrowserMatchNoCase "facebookexternalhit" facebook
order deny,allow
deny from env=feedfetcher
deny from env=facebook
</Limit>
它还会阻止google的feedfetcher,它也可以用于廉价的DDoSing。
答案 7 :(得分:1)
从FB方面的用户代理修改的角度来看,使用这样的正则表达式可能更安全:
<?php
if (preg_match("/facebook|facebot/i", $_SERVER['HTTP_USER_AGENT'])){
do_something();
}
?>
您可以在他们的文档中找到有关Facebook抓取工具的更多信息:https://developers.facebook.com/docs/sharing/webmasters/crawler
答案 8 :(得分:1)
Facebook用户代理是:
FacebookExternalHit/1.1 FacebookExternalHit/1.0 facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php) facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) facebookexternalhit/1.0 (+https://www.facebook.com/externalhit_uatext.php) facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)
我使用下面的代码在PHP中检测FB User-Agent,它按预期工作:
$agent = $_SERVER['HTTP_USER_AGENT'];
if(stristr($agent, 'FacebookExternalHit')){
//Facebook User-Agent
}else{
//Other User-Agent
}
答案 9 :(得分:0)
PHP中的另一种通用方法
$agent = $_SERVER['HTTP_USER_AGENT'];
$agent = trim($agent);
$agent = strtolower($agent);
if (
strpos($agent,'facebookexternalhit/1.1')===0
|| strpos($agent,'facebookexternalhit/1.0')===0
){
//probably facebook
}else{
//probably not facebook
}
答案 10 :(得分:0)
您已经在上面找到了针对Facebook的答案,但是获取任何用户代理的一种方法是在您的网站上放置一个脚本,该脚本在访问该网站时就会向您发送邮件。例如,在您的域上,例如https://example.com/user-agent.php上创建此文件:
<?php
mail('you@youremail.com', 'User Agent', $_SERVER['HTTP_USER_AGENT']);
然后,访问Facebook,并在此处键入指向脚本的链接,然后按空格键。实际上,您不必共享任何内容,只需输入链接,空格将使Facebook获取预览。然后,您应该收到Facebook用户代理的电子邮件。