Según otras respuestas, la palabra semioficial de Facebook es "chúpala". Me sorprende que cannot follow Crawl-delay (sí, sé que no es un "rastreador"), pero OBTENER 100 páginas en unos pocos segundos es un rastreo, como quieras llamarlo).
Dado que no se puede apelar a su arrogancia, y DROP'ing su bloque de IP es bastante draconiano, aquí está mi solución técnica.
En PHP, ejecute el siguiente código lo más rápido posible para cada solicitud.
define('FACEBOOK_REQUEST_THROTTLE', 2.0); // Number of seconds permitted between each hit from facebookexternalhit
if(!empty($_SERVER['HTTP_USER_AGENT']) && preg_match('/^facebookexternalhit/', $_SERVER['HTTP_USER_AGENT'])) {
$fbTmpFile = sys_get_temp_dir().'/facebookexternalhit.txt';
if($fh = fopen($fbTmpFile, 'c+')) {
$lastTime = fread($fh, 100);
$microTime = microtime(TRUE);
// check current microtime with microtime of last access
if($microTime - $lastTime < FACEBOOK_REQUEST_THROTTLE) {
// bail if requests are coming too quickly with http 503 Service Unavailable
header($_SERVER["SERVER_PROTOCOL"].' 503');
die;
} else {
// write out the microsecond time of last access
rewind($fh);
fwrite($fh, $microTime);
}
fclose($fh);
} else {
header($_SERVER["SERVER_PROTOCOL"].' 503');
die;
}
}
Puede probar esto desde una línea de comandos con algo como:
$ rm index.html*; wget -U "facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)" http://www.foobar.com/; less index.html
sugerencias de mejora son bienvenidos ... Conjeturaría sus podrían ser algunos problemas de concurrencia con una gran explosión.
En nuestro sitio, el facebook bot ha comenzado a expandir su carga desde el 21 de agosto a las 09:00 CET. ¡No más carga explosiva! –
Bot continuó su mala conducta el 7 de agosto :( –
Relacionados, vea: http://stackoverflow.com/questions/7716531/facebook-and-crawl-delay-in-robots-txt – artlung