如何识别Facebook用户代理

当在FB上分享我的一个页面时,我想展示一些不同的东西。 问题是,我不想使用og:元素,而是要识别FB用户代理。

它是什么? 我找不到

谢谢

有关用户代理string的列表,请查看此处 。 截至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添加到其可能的用户代理string列表中,所以我更新了我的代码以反映更改。 此外,代码现在更可预测未来的可能变化。

“Facebook的用户代理string是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(以及其他机器人)的更多信息,请参阅Botapsdia.org – 由Incapsula提供支持的Comunity-Sourced bot目录。

除了用户代理数据之外,该目录还提供IPvalidation选项,允许您交叉validationIP /用户代理,从而有助于防止模仿企图。

这里是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) 

请注意,版本号可能会更改。 因此,请使用正则expression式来查找搜寻器名称,然后显示您的内容。

更新

您可以在PHP中使用此代码来检查Facebook用户代理

 if(preg_match('/^FacebookExternalHit\/.*?/i',$agent)){ print "Facebook User-Agent"; // process here for Facebook } 

这里是ASP.NET代码。 你可以使用这个函数来检查userAgent是否是Facebook的useragent。

 public static bool IsFacebook(string userAgent) { userAgent = userAgent.ToLower(); return userAgent.Contains("facebookexternalhit"); } 

注意:

你为什么需要这样做? 当您在Facebook上分享您网站的链接时,Facebook会抓取它并parsing它以获取一些数据以显示您网页上的缩略图,标题和一些内容,但它会链接回您的网站。

此外,我认为这会导致网站的隐藏,即向用户和爬虫显示不同的数据。 伪装并不被认为是一种好的做法,search引擎和网站可能会logging下来。

更新 :截至2014年5月28日,Facebook还新增了一个用户代理

 Facebot 

您可以在https://developers.facebook.com/docs/sharing/webmasters/crawler上阅读更多关于Facebook抓取工具的信息;

请注意有时代理人是visionutils/0.2 。 你也应该检查一下。

简单的解决scheme是检查模式,而不是每次加载所有的混乱

 <?php # Facebook optimized stuff if(strstr($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')) { $buffer.='<link rel="image_src" href="images/site_thumbnail.png" />'; } ?> 

如果你想阻止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> 

它也阻止谷歌的feedfetcher,也可以用于廉价的DDoSing。

首先,你不应该使用in_array,因为你需要拥有完整的用户代理,而不仅仅是一个子集,因此很快就会随着变化而中断(例如,如果你遵循当前的首选答案,Facebook的1.2版本将无法工作)。 遍历一个数组,而不是使用正则expression式模式也慢。

毫无疑问,你会希望稍后再寻找更多的机器人,所以我给出了下面的例子,其中2个机器人名字用pipe道模式分割。 符号。 / 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"; } 

更安全,更快的代码。

从FB端的用户代理修改的angular度来看,使用这样的正则expression式可能更安全:

 <?php if (preg_match("/facebook|facebot/i", $_SERVER['HTTP_USER_AGENT'])){ do_something(); } ?> 

您可以在他们的文档中find关于Facebook抓取工具的更多信息: https : //developers.facebook.com/docs/sharing/webmasters/crawler

Facebook的用户代理是:

facebookexternalhit / 1.1(+ http://www.facebook.com/externalhit_uatext.php)facebookexternalhit / 1.1(+ https://www.facebook.com/externalhit_uatext.php

我正在使用下面的代码来检测PHP中的用户代理,它的工作原理如下:

 $agent = $_SERVER['HTTP_USER_AGENT']; if(stristr($agent, 'FacebookExternalHit')){ //Facebook User-Agent }else{ //Other User-Agent } 

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 }