Парсинг данных с помощью CURL

Один из самых простых вариантов воспользоваться PHP функцией file_get_contents(), но часто этого бывает мало, так как многие сайты для того, чтобы отдать нужный контент требуют отправить запрос с определёнными заголовками, куками или токенами. Также нам бывает нужна информация о заголовках в ответе сервера.

Для более сложных случаев удобнее составлять запросы с помощью функции из модуля cURL. cURL — модуль для PHP, обеспечивающий поддержку библиотеки функций libcurl. Эта библиотека позволяет формировать POST или PUT запросы к веб-серверам, скачивать файлы. Набор функций поддерживает различные протоколы обмена http, https, ftp и пр. Расширение cURL  позволяет работать с поддержкой прокси-серверов, cookies и проводить аутентификацию пользователей. Получается хороший  инструмент для имитации действий пользователя в браузере.

$url = „“; // адрес страницы
function get_ydata($url) {
    $ch = curl_init(); // инициализируем сеанс
    $timeout = 5; // устанавливаем таймаут
    //  устанавливаем параметры для сеанса
    curl_setopt($ch, CURLOPT_URL, $url); //  URL, с которым будет производиться операция
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  При установке этого параметра в ненулевое значение CURL будет возвращать результат, а не выводить его. 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // Количество секунд ожидания при попытке подключения. 0 — неограничено.
    $data = curl_exec($ch); // функция вызывается после инициализации сеанса и установки всех необходимых параметров. Именно она фактически выполняет требуемую операцию. 
    curl_close($ch); //  завершает сеанс cURL 
    return $data;
}

Данный пример можно использовать для парсинга данных с сайта YouTube.

$url = „https://www.googleapis.com/youtube/v3/videos?id=ВидеоID&part=snippet%2Cstatistics%2CcontentDetails&key=КлючAPI“;
$data_curl = get_ydata($url);
$ArrayYouTube = json_decode($data_curl, true); // декодируем строку JSON в массив (если не указать параметр true — вернётся Объект PHP)

 

Пример для загрузки изображения по https или http на сервер

//Функция для сохранения изображения через CURL
function save_image($img,$path){
  $curl = curl_init($img);
  curl_setopt($curl, CURLOPT_HEADER, 0);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($curl, CURLOPT_BINARYTRANSFER,1);
  $content = curl_exec($curl);
  curl_close($curl);

  if (file_exists($path)) :
    unlink($path);
  endif;
  $fp = fopen($path,'x');
  fwrite($fp, $content);
  fclose($fp);
}
$Image = „https://wm.timeweb.ru/images/posters/600x90/600x90-1.gif“;
$ImageNew = '…/img/new-image.jpg'; 
if (!save_image($Image, $ImageNew)) { // Сохраняем файл
   return „Файл не сохранён!“;
}