回答
對於用戶代理字符串列表,查找here。截至2015年9月,使用最多的是facebookexternalhit/*
和Facebot
。由於您尚未說明您嘗試識別用戶代理的語言,因此我無法告訴您更多信息。如果你想認識PHP Facebook的機器人,使用
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
}
UPDATE:Facebook已經增加Facebot
其可能的用戶代理字符串列表,所以我已經更新了我的代碼以反映更改。此外,代碼現在可以更好地適應未來可能發生的變化。
您可以結帳[Facebook的最佳實踐頁面](https://developers.facebook.com/docs/sharing/best-practices#crawl)瞭解更多以及關於如何檢測其抓取工具和刮板的最新細節。請注意,** Facebot **已被添加到用戶代理字符串列表中。 – donut 2014-12-05 23:03:21
@甜甜圈的鏈接不再包含正確的信息。更新後的URL是:https://developers.facebook.com/docs/sharing/webmasters/crawler – rinogo 2015-09-16 21:08:24
另外,FWIW,我使用了以下更多面向未來的代碼:'if(strpos($ _ SERVER [「HTTP_USER_AGENT」 ],「facebookexternalhit /」)!== false || strpos($ _ SERVER [「HTTP_USER_AGENT」],「Facebot」)!== false){/ *這可能是Facebook的bot * /}' – rinogo 2015-09-16 21:11:42
以下是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的還增加了一個新的用戶代理爲5月28日的2014
Facebot
你可以閱讀更多關於Facebook的履帶上https://developers.facebook.com/docs/sharing/webmasters/crawler
請先閱讀Facebook的隱私政策! – mate64 2012-04-20 17:43:45
@msec:如果Facebook不抓取頁面,它如何知道頁面的細節,如標題,縮略圖等? – 2012-07-26 19:48:14
「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提供的Comunity-Sourced bot目錄。
除了用戶代理數據,該目錄還提供IP驗證選項,允許您交叉驗證IP /用戶代理,從而有助於防止模仿企圖。
簡短的解決方案是檢查模式,不加載所有的爛攤子用戶每次
<?php
# Facebook optimized stuff
if(strstr($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')) {
$buffer.='<link rel="image_src" href="images/site_thumbnail.png" />';
}
?>
不要忘記'!empty($ _ SERVER ['HTTP_USER_AGENT'])',因爲當客戶端不發送該頭部時,未設置$ _SERVER ['HTTP_USER_AGENT']'。 – 2016-05-15 22:13:59
首先你不應該使用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";
}
更安全快速的代碼。
在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
}
如果你想訪問你的網站阻止Facebook的機器人(假設你使用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。
在對FB端用戶代理修改的角度來看,這也許是更安全的使用那樣的正則表達式:
<?php
if (preg_match("/facebook|facebot/i", $_SERVER['HTTP_USER_AGENT'])){
do_something();
}
?>
你可以找到自己的文檔關於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)
我使用下面的代碼來檢測FB用戶代理在PHP和它的作品像預期一樣:
$agent = $_SERVER['HTTP_USER_AGENT'];
if(stristr($agent, 'FacebookExternalHit')){
//Facebook User-Agent
}else{
//Other User-Agent
}
- 1. 識別Facebook用戶ID
- 2. 從url中識別Facebook用戶標識?
- 3. cURL代理識別
- 4. asp如何識別用戶?
- 5. 如何識別代理模型實例?
- 6. CLR如何識別管理代碼?
- 7. 如何識別通過Facebook api登錄的用戶?
- 8. Facebook Authenticate將如何讓我識別用戶?
- 9. Facebook用戶標識如何工作?
- 10. 用戶如何識別任何事件
- 11. 如何識別用戶使用DEVELOPER_DEFINED_PAYLOAD
- 12. 如何識別用戶代理是否爲Windows 8平板電腦?
- 13. 不會識別應用程序代理
- 14. FB('/ me',功能(用戶){})未識別的Facebook用戶
- 15. 識別來自用戶代理的抓取程序
- 16. 通過瀏覽器代理詳細信息識別用戶?
- 17. Gcloud CLI身份識別代理管理
- 18. 如何識別Facebook機器人?
- 19. 如何從服務器識別處理請求的用戶
- 20. 如何通過Backbone識別用戶?
- 21. 如何識別非人類用戶?
- 22. 如何使用Javascript識別客戶端?
- 23. 如何識別IOS中的用戶
- 24. Google Checkout訂閱:如何識別用戶
- 25. 如何識別登錄用戶?
- 26. 如何識別Google OAuth2用戶?
- 27. 如何識別用戶選擇哪些?
- 28. 如何識別用戶取消的SqlException?
- 29. java web服務:如何識別用戶
- 30. 如何識別用戶會話? Rails的
'如果(strpos($ _ SERVER [ 'HTTP_USER_AGENT' ],'facebookexternalhit')!== false){...}' – Xeoncross 2015-01-30 18:46:54