Curl в php

cURL — это свободная кроссплатформенная служебная программа командной строки для передачи файлов по различным протоколам с синтаксом URL.

Использование cURL в php

При использовании под Windows лучше для надёжности скопировать файлы libeay32.dll и ssleay32.dll из папки с php в system32.
Представляет собой (не знаю, как всё устроено внутри, но как выглядит «наружу») объект, который инициализируется factory-функцией, после чего можно при помощи своеобразных сеттеров установить необходимые свойства, а потом запустить выполнение.
Использование:

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);

Т.е. все сводится к вызову curl_init, нескольким вызовам curl_setopt, затем curl_exec и curl_close.
Разберём эти функции подробнее (полный список — здесь):

curl_init

resource curl_init  ([ string $url = NULL  ] )

Инициализирует новую сессию и возвращает её дескриптор («создаёт объект»).
Опционально можно передать урл, тогда будет установлено свойство CURLOPT_URL (можно установить и позже).

curl_setopt

bool curl_setopt  ( resource $ch  , int $option  , mixed $value  )

Основная функция. Устанавливает «свойство» для указанного первым параметром «объекта».
resource $ch — дескриптор cURL-сессии
int $option — опция («свойство») (задаётся не целым числом, а предопределёнными константами)
mixed $value — значение.
Самое интересное здесь — эти самые предопределённые константы, в них вся сложность. Все они перечислены на официальном сайте, хоть и не по алфавиту немного.

curl_exec

mixed curl_exec  ( resource $ch  )

Выполняет cURL-запрос.
Возвращает обычно true/false, но если установлен параметр CURLOPT_RETURNTRANSFER, то при успешном выполнении вернёт ответ.

curl_close

void curl_close  ( resource $ch  )

Закрывает cURL-сессию и освобождает все ресурсы, в том числе и переданный $ch.

Вспомогательные функции:

curl_errno

int curl_errno  ( resource $ch  )

Возвращает номер ошибки или 0, если всё прошло хорошо.

curl_error

string curl_error  ( resource $ch  )

Возвращает описание ошибки или », если всё прошло хорошо.

curl_getinfo

mixed curl_getinfo  ( resource $ch  [, int $opt = 0  ] )

Можно передать параметр $opt (из констант).
Возвращает информацию о последнем обмене данными (короче, трансфере).
Если передан второй параметр, то возвращает строку, если нет — массив всех параметров.

Пример

$ch = curl_init();
//задаём url
curl_setopt($ch, CURLOPT_URL, "http://mysite:90/myuri");
//подделываем юзер-агента
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; 3305; .NET CLR 1.0.3705; .NET CLR 1.1.4322)'); 
//переходить по редиректам, инициируемым сервером, пока не будет достигнуто CURLOPT_MAXREDIRS (если есть)
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
//устанавливаем HTTP-заголовки (приходится устанавливать все, т.к. функция затирает дефолтные)
$headers = array
	(
		"Host: mysite:90",
		"Referer:  http://mysite:90/anotherurl",
		"Accept: */*",
		"Accept-Charset: utf-8,windows-1251,*",
		"Accept-Language: ru"
	);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//не включать заголовки ответа сервера в вывод
curl_setopt($ch, CURLOPT_HEADER, false);
//вернуть ответ сервера в виде строки
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (curl_errno($ch))
{
	//обработка ошибки, используя curl_error()
}
curl_close($ch);

*Формат строк для массива HTTP-заголовков — такой же, как и в функции header()

LEAVE A COMMENT