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

Пока мы изучим только основы работы с этой библиотекой. Более продвинутые вещи будут постепенно разбираться на протяжении всей книги.

Как работать с CURL

Работа с курл состоит всего лишь из трех функций - функция curl_init инициализирует сеанс работы с библиотекой и записывает его в переменную. Дальнейшая работа ведется с этой переменной.

Следующим этапом являются настройки - они делаются с помощью функции curl_init, которая первым параметром принимает переменную с сеансом (результат curl_init), вторым параметром - название параметра для настройки (в виде константы PHP), а третьим параметром - значение параметра настройки.

После настроек вызывается функция curl_exec, которая и выполняет запрос к сайту в соответствии с настройками. Эта функция возвращает HTML код заданной страницы.

Давайте посмотрим на минимально необходимые настройки (что они делают читайте в комментариях):

<?php
	//Инициализируем сеанс
	$curl = curl_init();

	//Указываем адрес страницы
	curl_setopt($curl, CURLOPT_URL, $url);

	//Ответ сервера сохранять в переменную, а не на экран	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	//Переходить по редиректам
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

	//Выполняем запрос:	$result = curl_exec($curl);

	echo $result;?>

Давайте попробуем получить главную страницу моего сайта:

<?php
	//Инициализируем сеанс
	$curl = curl_init();

	//Указываем адрес страницы
	curl_setopt($curl, CURLOPT_URL, 'http://theory.phphtml.net');

	//Ответ сервера сохранять в переменную, а не на экран	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	//Переходить по редиректам
	curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

	//Выполняем запрос:	$result = curl_exec($curl);

	//Отлавливаем ошибки подключения
	if ($result === false) {
	echo "Ошибка CURL: " . curl_error($curl);
	} else {
		echo $result;
	}
?>

Сделаем функцию для удобства работы

Давайте сделаем функцию для удобства работы, которую и будем использовать в дальнейшем. Пусть функция принимает адрес страницы сайта, а возвращает ее исходный код:

<?php
	function getPageByUrl ($url)
	{
		//Инициализируем сеанс
		$curl = curl_init();

		//Указываем адрес страницы
		curl_setopt($curl, CURLOPT_URL, $url);

		//Ответ сервера сохранять в переменную, а не на экран		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		//Переходить по редиректам
		curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

		//Выполняем запрос:		$result = curl_exec($curl);

		//Отлавливаем ошибки подключения
		if ($result === false) {			echo "Ошибка CURL: " . curl_error($curl);
			return false;
		} else {
			return $result;
		}
	}

	echo getPageByUrl('http://theory.phphtml.net');
?>

Документация по CURL

Документацию по CURL смотрите тут.