Парсинг PHP: Библиотека CURL — PROG-TIME

Парсинг PHP: Библиотека CURL

06.01.2019
Содержание:

В данном уроке мы разберем основы работы с библиотекой CURL. Эта библиотека является намного более продвинутой альтернативой функции file_get_contents. В отличие от нее, CURL позволяет работать с куками, с заголовками, позволяет отправлять формы и переходить по редиректам.

Библиотека CURL не требует дополнительных файлов, и ее не нужно подключать. По факту CURL уже давно не библиотека, так как уже давно включена в PHP сборку. Но все же в некоторых версиях её может и не быть, поэтому лучше проверить подключение CURL в файле php.ini

Для начала мы сделаем простой запрос, который просто достает данные, как это делает file_get_contents.

Есть несколько обязательных функций для работы с CULR.

curl_init() — инициализирует сеанс. Работу этой функции, в дальнейшем, нужно будут передавать в другие функции, поэтому желательно записать ее в переменную. $curl = curl_init() .

curl_setopt() — это основная функция, которая обрабатывает CURL запросы. В зависимости от переданных параметров, функция выполняет разную работу.

curl_setopt($curl, CURLOPT_URL, 'http://prog-time.ru') — указываем адрес страницы. Первый параметр передает работу функции curl_init() . Вторым параметром передается специальная константа. Третий параметр — url страницы.

curl_exec($curl) — выполняем запрос. Эта часть кода прописывается в самом конце, после всех правил.e

Вот код который обязательно должен быть прописан :

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $url);
curl_exec($curl);

Три функции вместо одно. Вам кажется что это наоборот усложняет код, но дальше вы узнаете почему CURL лучше.

Запись результата в переменную

По стандарту CURL всю полученную информацию выводит на эран. Для того чтобы вывести данные на экран, пропишем следующее

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

Первый параметр передает работу функции curl_init() . Вторым параметром передается специальная константа. Третий параметр — 1, это сравнимо со значением true.

Так же нужно записать работу функции curl_exec в переменную. Например так.

$result = curl_exec($curl);

Переход по редиректам

Некоторые страницы сайтов содержат редиректы, которые перекидывают пользователя на другие страницы. Если вы будете парсить такие страницы функцией file_get_contents, она не станет переходить по редиректам и вернет пустую страницу.

И здесь мы получаем первую особенность библиотеки CURL. У нее есть специальная константа для функции curl_setopt() —
CURLOPT_FOLLOWLOCATION.

Записывается это так:

 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 

Если последним параметром вы передадите true, функция будет переходить по всем редиректам и остановится только когда пройдет последний.

Но бывают случаи когда редиректов слишком много и нам нужно остановиться на определенном. Для этого нужно добавить дополнительную строчку кода.

 curl_setopt($curl,  CURLOPT_MAXREDIRS , 3);

Последним параметром передается количество редиректов.

В этой записи я вам показал стандартный код, который используют чаще всего. Теперь давайте немного улучшим наш код, записав его в функцию.

function parser($url){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($curl);
    return $result;
}

Для простых GET запросов используется следующий код.

$ch = curl_init('https://prog-time.ru/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
echo $html;

Отправка GET запросов с помощью Curl

$getQuery = array(
	'name'  => 'Prog-Time',
	'email' => 'test@example.com'
);
$ch = curl_init('https://prog-time.ru?' . http_build_query($getQuery));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$html = curl_exec($ch);
curl_close($ch);
 echo $html;
На этом всё!
Больше интересных статей в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime
Наши планы
  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube

Контакты для связи

Технология на prog-time
Telegram
https://t.me/prog_time_bot