Класс PHP Class - User Agent String
Решил поделиться своей достаточно старой разработкой на PHP - классом для генерации идентификационных строчек браузеров (User Agent String).
Он умеет генерировать как случайные, так и с указанными параметрами строчки идентификации интернет-браузеров. Класс очень прост в использовании и модификации, без проблем можно добавить свои шаблоны и варианты для генерации строчек UserAgent.
Скрипт был написан снуля, поскольку я не нашел ничего аналогичного по функционалу ни на PHPClasses ни на других сайтах и форумах программистов того времени, а нужна была гибкость и многовариантность. Вариант с базой готовых сгенерированных строчек UserAgent сразу отпал, поэтому и появилась идея написать этот класс.
Содержание:
- Что такое User Agent ?
- Генерация строки UserAgent String с указанными параметрами
- Генерация строки UserAgent String с частично указанными параметрами
- Генерация абсолютно случайной по всем параметрам UserAgent String
- Получаем список доступных значений параметров для генерации
- Заключение
Что такое User Agent ?
В википедии достаточно подробно описано что это такое, повторяться не буду, вся суть хорошо описана вот тут - Wiki: Что такое User Agent.
Скажу лишь, что это уникальная строчка идентификации для браузера, которая содержит название и версию ОС под которой он работает, название и версию ядра для отрисовки гипертекстовых страниц, а также само название браузера.
Каждый браузер в отсылаемых серверу запросах предоставляет свою уникальную идентификационную строку (user agent string), ее структура зависит от используемой платформы, ядра браузера, версии и т.п.
Строку идентификации имеют не только пользовательские браузеры. Каждый сервис или веб-робот, который посещает веб-страницы, также пересылает свою уникальную для данного типа сервиса строку идентификации.
Например, роботы Google и Yandex - гуляют по сайтам и индексируют их содержимое, при этом также отсылая свои строки идентификации вместе с каждым запросом.
Некоторые сервисы подменяют стоку идентификации, выдавая себя за пользовательский браузер чтобы не дать себя идентифицировать системами сбора статистики и анализа посетителей.
Вы также можете использовать для своих приложений уникальные строки идентификации, которые говорят что в гости на сайт зашли через IE или Opera.
Вот несколько примеров строк идентификации для разных платформ и версий браузеров:
Для браузера Samsung Galaxy S Android 2.2:
Mozilla/5.0 (Linux; U; Android 2.2; ru-ru; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Для браузера Opera 11.10 под Windows 7:
Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10
Для браузера Mozilla Firefox 4.0 под Windows XP:
Mozilla/5.0 (Windows; I; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20100101 Firefox/4.0
Робот от Гугла - Google Bot:
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Теперь перейдем к делу и попробуем наш класс в действии. Приведу несколько примеров вызова класса с параметрами, чтобы стало ясно как его использовать.
Генерация строки UserAgent String с указанными параметрами
Перейдем сразу к не сложному примеру использования класса.
require_once('user_agent_string.php');
$user_agent = new UserAgentString();
$user_agent->browser_type = 'Firefox'; // браузер должен быть Mozilla Firefox
$user_agent->os = 'FreeBSD'; // операционная система FreeBSD
$user_agent->country_iso = 'RU'; // русская локаль
$user_agent->browser_version = '3.5.3'; // версия нашего браузера 3.5.3
print $user_agent->Compile();
В результате работы мы получим строку:
- Mozilla/5.0 (X11; U; FreeBSD i386; ru-RU; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Генерация строки UserAgent String с частично указанными параметрами
require_once('user_agent_string.php');
$user_agent = new UserAgentString();
$user_agent->browser_type = 'Firefox';
$user_agent->country_iso = 'RU';
$user_agent->randomize = true; // включение режима случайной генерации
print $user_agent->Compile();
В результате запусков скрипта мы получим строки с случайно сгенерированными параметрами browser_version и os, язык и тип браузера мы указали:
- Mozilla/5.0 (X11; U; Linux x86_64; ru-RU; rv:1.9.0.2) Gecko/20090327 Firefox/3.1
- Mozilla/5.0 (Windows NT 5.2; ru-RU; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
- Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru-RU; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1
Генерация абсолютно случайной по всем параметрам UserAgent String
require_once('user_agent_string.php');
$user_agent = new UserAgentString();
$user_agent->randomize = true;
print $user_agent->Compile();
В результате каждого запуска скрипта мы получим строки:
- Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.2) Gecko/20040804 Navigator/7.2
- Mozilla/4.0 (compatible; MSIE 7.0; Windows; U; Windows NT 6.0; MAXTHON 2.0; )
- Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.0 Safari/532.2
- Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.7.5) Gecko/20060127 Navigator/8.1
- и т.п.
Как получить список возможных параметров (os, browser_type, country_iso, browser_version)? - для этого есть специальные методы, которые возвращают массив со списком всех доступных значений для заданных параметров.
Получаем список доступных значений параметров для генерации
require_once('user_agent_string.php');
$user_agent = new UserAgentString();
print_r($user_agent->available_oses()); // список ОС
print_r($user_agent->available_browsers()); // список типов браузеров
print_r($user_agent->available_browser_versions('Opera')); //доступные версии Opera
print_r($user_agent->available_languages()); // доступные языки: RU, EN, UK....
Добавить в класс новые браузеры и их версии, а также версии ОС не сложно. Все построено на основе массивов, модифицировать/добавить нужные данные в класс, я думаю, не составит большого труда.
Заключение
Таким образом, комбинируя разные типы ОС, языки, типы и версии браузеров мы получаем достаточно большое количество комбинаций строк UserAgent String.
Также в классе предусмотрены исключения - чтобы не было такого, что строка идентифицирует браузер, например Internet Explorer, который запущен на ОС FreeBSD.
Скачать класс UserAgentString с примерами можно тут: Скачать класс UserAgentString (zip, 3 Кб).