Как распознать Facebook User-Agent

при совместном использовании одной из моих страниц на FB Я хочу отобразить что-то другое. Проблема в том, что я предпочитаю не использовать OG: elements, а распознавать пользовательский агент FB.

Что это? Я не могу его найти.

спасибо

10 ответов


для списка строк user-agent найдите здесь. Наиболее часто используемые, по состоянию на сентябрь 2015 года,facebookexternalhit/* и Facebot. Поскольку вы не указали, на каком языке вы пытаетесь распознать user-agent, я не могу сообщить вам больше информации. Если вы хотите распознать Facebook bot в PHP, используйте

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 чтобы перечислить их возможные строки пользовательского агента, поэтому я обновил свой код, чтобы отразить изменение. Кроме того, код теперь более предсказуемы для возможных будущих изменений.


" строка пользовательского агента 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 - comunity-Sourced каталог бот, питание от Incapsula.

помимо данных агента пользователя, каталог также предлагает опцию проверки IP, позволяющую перекрестную проверку IP / агента пользователя, что помогает предотвратить попытки олицетворения.


вот пользовательский агент искателей 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 useragent.

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

Примечание:

зачем вам это нужно? Когда Вы делитесь ссылкой на свой сайт на Facebook, facebook обходит ее и анализирует, чтобы получить некоторые данные для отображения миниатюры, заголовка и некоторого контента с вашей страницы, но это будет ссылка на ваш сайт.

кроме того, я думаю, что это приведет к маскировке сайта, т. е. отображению разных данных пользователю и искателям. Маскировка не считается хорошей практикой и может использоваться поисковыми системами и сайтом запомните это.

обновление: Facebook также добавил новый useragent по состоянию на 28 мая 2014

Facebot

вы можете узнать больше о Facebook crawler на https://developers.facebook.com/docs/sharing/webmasters/crawler


Пожалуйста, обратите внимание, что иногда агент visionutils/0.2 . Вы тоже должны проверить.


короткое решение-проверить шаблон, а не загружать весь беспорядок пользователю каждый раз

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

и если вы хотите заблокировать Facebook bot от доступа к вашему сайту (при условии, что вы используете Apache), добавьте это в свой :

<Limit GET POST>
BrowserMatchNoCase "Feedfetcher-Google" feedfetcher
BrowserMatchNoCase "facebookexternalhit" facebook
order deny,allow
deny from env=feedfetcher
deny from env=facebook
</Limit>

Он также блокирует feedfetcher google, который также может быть использован для дешевого DDoSing.


во-первых, вы не должны использовать in_array, поскольку вам нужно будет иметь полный пользовательский агент, а не только подмножество, таким образом, быстро сломается с изменениями (т. е. версия 1.2 от facebook не будет работать, если вы будете следовать текущему предпочтительному ответу). Также медленнее выполнять итерацию через массив, а не использовать шаблон регулярного выражения.

Как, без сомнения, вы захотите найти больше ботов позже, поэтому я привел пример ниже с 2 именами ботов, разбитыми на шаблон с трубой | символом. я в конец делает его нечувствительным к регистру.

также вы не должны использовать $_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, возможно, безопаснее использовать регулярное выражение:

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

вы можете найти более подробную информацию о Facebook crawler на их doc:https://developers.facebook.com/docs/sharing/webmasters/crawler


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)

Я использую приведенный ниже код для обнаружения пользовательского агента FB в 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
}