cURL пример эмуляции браузера
В настоящее время контент для сайтов в интернете превратился в самое настоящее сырье или продукт, размещение и копирование контента приобрело по настоящему промышленные масштабы, по сети бродит огромное количество ботов-парсеров, парсеров Яндекс Маркета, досок объявлений, парсеров RSS лент и прочих бездушных созданий :). Но в этой статье речь пойдет не о парсинге как таковом, а лишь об одной его части - получение HTML кода страницы сайта посредством эмуляции работы браузера, которое возможно при использовании библиотеки CURL .
Библиотека CURL это свободно распространяемая консольная программа, которая устанавливается на web сервер, она имеет привязку к более чем 30 языкам программирования. Используется для передачи файлов между серверами по протоколам:
- FTP
- FTPS
- HTTPS и его методы HTTP POST, HTTP PUT
- GOPHER
- LDAP
- DICT
- TELNET
- FILE
В данной заметке я приведу пример получения данных (html) страницы с помощью CURL по протоколу HTTP, при этом будет эмулироваться работа web браузера посредством подмены CURL передаваемых заголовков (Header). И сервер которому отправляется запрос через CURL определит этот запрос как обычный запрос клиентского браузера пользователя.
И так приступим. Для начала вы должны убедится в том что на вашем сервере установлен CURL , если у вас Denwer - то CURL на нем не установлен! Для проверки используйте функцию:
- <?php
- ?>
Также расширение libcurl должно быть включено в конфигурационном файле php.ini, на большинстве современных и нормальных хостинг площадках, расширение CURL включено по умолчанию. И так если вы все проверили и CURL поддерживается приступаем к написанию простой функции примера работы с CURL по протоколу HTTP.
Функция на вид очень проста т.к все манипуляции выполняет сама библиотека CURL , а мы всего лишь инициализируем ее работу и устанавливаем определенные опции:
- <?php
- function curl_get($host, $referer = null){
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_REFERER, $referer);
- curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51");
- curl_setopt($ch, CURLOPT_URL, $host);
- curl_setopt($ch, CURLOPT_TIMEOUT, 10);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
- $html = curl_exec($ch);
- curl_close($ch);
- return $html;
- }
- $result = curl_get("market.yandex.ru/search.xml?text=".$text , 'http://google.com');
- ?>
Ну а теперь по порядку распишу все что входит в функцию curl_get():
- curl_init() - инициализация библиотеки, создает новый сеанс CURL и возвращает дескриптор, который используется с функциями CURL _setopt(), CURL _exec() и CURL _close(). Если передан необязательный аргумент url, опция CURLOPT_URL будет автоматически установлена в значение этого аргумента. Если этот аргумент не передан, необходимо использовать функцию CURL _setopt().
- curl_setopt() - устанавливает параметр для сеанса CURL , заданного аргументом ch. Аргумент option задает устанавливаемый параметр, а value - его значение.
- CURLOPT_HEADER - параметр, при установке которого в значение неравное "0", ответ будет включать еще и передаваемые сервером заголовки.
- CURLOPT_REFERER - параметр который задает значение HTTP заголовка "Referer", тоесть откуда мы попали на данную страницу к которой обращаемся по CURL .
- CURLOPT_USERAGENT - параметр подменяющий значение HTTP заголовка "User-Agen", сервер определит версию браузера и сам браузер, таким образом эмулируется работа браузера.
- CURLOPT_URL - URL адрес сайта\хоста к которому будет отправлен HTTP запрос посредством CURL . Значение этого параметра также может быть задано в вызове функции CURL _init().
- CURLOPT_TIMEOUT - параметр задает максимальное время выполнения операции по получению\отправки данных в секундах.
- CURLOPT_RETURNTRANSFER - параметр, установка которого в ненулевое значение определяет что CURL не будет выводить полученные данные, а помещать их в переменную.
- CURLOPT_FOLLOWLOCATION - параметр, установка которого в ненулевое значение определяет, что если сервер при обращении к нему, применяет Redirekt - следовать по пути переадресации и получать данные.
- curl_exec() - функция вызывается после инициализации сеанса CURL и установки всех необходимых опций, фактически это она выполняет требуемую операцию.
- curl_error() - возвращает строку содержащую номер последней ошибки для текущей сессии CURL .
- curl_close() - функция завершающая сеанс работы CURL .
Описанных опций вполне достаточно для такого простого примера работы с CURL , в этом примере осуществляется запрос к Яндекс маркету с текстом поиска "мониторы lg" - в результате будет выведен список товаров по этому запросу. Далее остается непосредственно сам парсинг товарных позиций, названий товаров, цен, адресов магазинов и прочей информации которая восстребована. Но эта часть не входит в данную статью и поэтому будет рассмотрена в следующий раз, следите за новостями и подписывайтесь на RSS трансляцию.
Посмотреть пример CURL : пример CURL
Скачать пример CURL : Скачать пример CURL
А для веб мастеров зарабатывающих на своих сайтах, или владельцев электронных магазинов рекомендую новый сервис http://sitepolice.ru, с помощью которого вы сможете улучшить свой сайт по очень многим критериям, будь то дизайн, юзабилити, тексты на сайтах, внутренняя оптимизация seo и не только, это сервис в котором работают настоящие профессионалы!
PS. Читайте последние записи RSS Подписка на RSS