Как устранить проблему, возникающую только тогда, когда бот (google) запрашивает страницу?


Мое приложение выдает Zend_Locale_Exception при вызове из googlebot, где ZF отправляет следующее сообщение об ошибке:

Не удалось выполнить автоматическое определение локали!

Проблема, вероятно, в том, что локаль по умолчанию не установлена, но как я могу это отладить?

Поскольку бот Google не работает в реальном времени, мне нужно на самом деле подделать HTTP-запрос, который делает бот, но как я могу узнать, как выполняется этот запрос?

Попытка отправить Принять-язык заголовок с завитком не будет воспроизводить ошибку:

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'http://www.mysite.com.br/');
   curl_setopt($ch, CURLOPT_HEADER, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept-Language'));
   echo $data = curl_exec($ch);
   curl_close($ch);

РЕДАКТИРОВАТЬ:

Чтобы уточнить еще больше:

  • Я знаю, что проблема, вероятно, в отсутствии локали по умолчанию, но Мне НУЖНО отладить это
  • Изменение агента пользователя моего браузера не работает, оно изменяет только строку UA, локаль по-прежнему отправляется из моего браузера
Author: hakre, 2012-04-11

4 answers

В инструментах для веб-мастеров Google есть функция "Извлекать как Googlebot". Возможно, вы сможете использовать это, чтобы вызвать попадание бота на ваш сайт. Вы даже можете временно добавить страницу phpinfo() на свой сайт и использовать эту функцию, чтобы нажать на нее, в которой будут перечислены все заголовки в ответе, который она вам покажет.

 3
Author: Tim Fountain, 2012-04-11 15:18:31

Моя рекомендация такова:

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

Для этого вы можете добавить в свой файл application.ini:

resources.locale.default = "en_US"

Кроме того, убедитесь, что вы не используете обнаруженную локаль в своей начальной загрузке, если вам нужно это сделать, всегда убедитесь, что ресурс локали был "расширен" с помощью $this->bootstrap('locale'); в методах/плагинах, которые используют Zend_Locale.

Вы можете имитируйте такое же поведение с помощью терминала и браузера, такого как Lynx, тогда вам, вероятно, потребуется отменить установку некоторых переменных среды (например, LANG, ЯЗЫК).

 3
Author: Liyali, 2012-04-11 14:57:23

Wget --агент пользователя "googlebot(в)googlebot.com Агент пользователя: Mozilla/5.0 (совместимый; Googlebot/2.1; +http://www.google.com/bot.html)""http://www.mysite.com.br /"

 1
Author: sathia, 2012-04-11 14:54:15

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

Однако, как написано, может быть множество причин, по которым это срабатывает, вы найдете автоматическое обнаружение в Locale.php.

 1
Author: hakre, 2012-04-11 15:13:17