网络爬虫-Facebook在404个链接上请求{url}/no_Facebook_preview_picture.jpg



我们使用了一个URL缩短器,在过去一周左右,我们开始看到来自Facebook旗下IP和用户代理facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php) 的许多奇怪的{normal url}/no_facebook_preview_picture.jpg请求

如果我在墙上发布一个到我们网站的正常链接(设置为Only Me,以便我可以测试),我会在我们的访问日志中获得以下条目

66.220.152.6 - - [05/Feb/2013:16:31:36 +0000] "GET /44_U HTTP/1.1" 200 1314 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "-"

然而,如果我发布了一个返回404或410的链接(创建后删除了垃圾邮件链接),我会得到这个

69.171.237.15 - - [05/Feb/2013:16:49:16 +0000] "GET /notexistURL HTTP/1.1" 404 1319 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "-"

然后在一个小时左右的

173.252.110.113 - - [05/Feb/2013:17:15:15 +0000] "GET /notexistURL/no_facebook_preview_picture.jpg HTTP/1.1" 404 0 "-" "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" "-"

该IP的WhoIs报告

NetName FACEBOOK-INC
NetHandle   NET-173-252-64-0-1

所以它们绝对是Facebook的IP。

我们每天收到大约10-20个这样的请求,都是一样的。我们只能取回7天的日志文件,但这些请求发生在7天前。

我已经测试了唯一的链接,所以没有其他方法可以找到该链接。我个人不怎么使用Facebook,除了我的测试链接之外,所有的链接都是由其他用户创建/发布的,但我识别出所有链接到我Facebook帐户的应用程序,没有什么异常,所以我不认为这是第三方应用程序(如果需要,我可以提供列表,但它们都是知名应用程序)

在我检查日志文件的过程中,Facebook似乎甚至没有智能地创建这些请求,它只是盲目地将字符串/no_facebook_preview_picture.jpg粘贴在URL的末尾,即使是查询字符串。例如

69.171.228.114 - - [05/Feb/2013:17:19:13 +0000] "GET /iAmNotARealURL1234777?ref=fb&cows_go=moo HTTP/1.1" 404 1118 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "-"
69.171.228.114 - - [05/Feb/2013:17:19:13 +0000] "GET /iamnotarealurl1234777 HTTP/1.1" 404 1118 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "-"
173.252.103.4 - - [05/Feb/2013:17:44:41 +0000] "GET /iAmNotARealURL1234777?ref=fb&cows_go=moo/no_facebook_preview_picture.jpg HTTP/1.1" 404 1118 "-" "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "-"

谷歌似乎显示了很多随机结果,大部分来自链接创建者,但我找不到任何关于这些请求的信息。

这些要求是什么?脸书需要它们做什么?这是我们应用程序中的错误,还是可以安全地忽略这些请求?

更新:

有些日子,我们现在有2-3百次点击这些网址

[sr@ns309372 nginx]$ for DAYLOG in `find ./ | grep "dftbashort.log-"`; do COUNT=`cat $DAYLOG | grep no_facebook_preview_picture | wc -l`; echo "${DAYLOG} has ${COUNT} occurences"; done
./dftbashort.log-20130201 has 0 occurences
./dftbashort.log-20130130 has 2 occurences
./dftbashort.log-20130129 has 2 occurences
./dftbashort.log-20130128 has 2 occurences
./dftbashort.log-20130202 has 378 occurences
./dftbashort.log-20130207 has 222 occurences
./dftbashort.log-20130205 has 257 occurences
./dftbashort.log-20130209 has 178 occurences
./dftbashort.log-20130131 has 2 occurences
./dftbashort.log-20130203 has 266 occurences
./dftbashort.log-20130206 has 667 occurences
./dftbashort.log-20130204 has 12 occurences
./dftbashort.log-20130127 has 4 occurences
./dftbashort.log-20130208 has 260 occurences

我们不提供任何开放图元标记,页面除了meta/javascript重定向之外没有其他内容。

我很确定这是一个共享刮刀,它试图构建你的URL预览,通过Facebook的调试工具运行URL,你会看到Facebook看到/正在寻找

我不确定/notexistURL/no_facebook_preview_picture.jpg请求是什么,假设您的代码中没有任何指向这样一个URL的内容;如果非要我猜测的话,我会说这是在没有元标签的情况下使用的某种默认或回退;可能是一个错误-我很有信心,如果你为Facebook包含正确的元标签,它会抓取这些标签,而不会发出无效请求,此外,你的URL共享在Facebook.com和其他支持相同标签的网站上看起来更好

今天早上我遇到了同样的事情,并进行了一些挖掘。您可以使用此网站上的信息来帮助引导您朝着正确的方向前进。似乎有助于我的网站被这些错误杀死。

最新更新