В данном уроке мы разберем основы работы с библиотекой 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;