ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

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

Библиотека CURL

Библиотека CURL

Библиотека CURL

Помимо сокетов, обеспечивающих низкоуровневое обращение к серверу, РНР располагает специальным расширением CURL (Client URL Library).

Примечание. В случае расширения CURL не требуется удаление HTTP-заголовков, возвращаемых сервером, так как библиотека их удаляет по умолчанию. Однако CURL можно настроить на выдачу HTTP-заголовков, передаваемых сервером, если установит при помощи функции curl_setopt() ненулевое значение параметра CURLOPT_HEADER.

Внимание! Перед запуском скрипта, проверьте подключена ли библиотека CURL в конфигурационном файле php. ini. Для подключения библиотеки раскоментируйте строку extension=php_curl.dll, иначе скрипт работать не будет.

Загрузка страницы с использованием расширения CURL

<?php
//задаем адрес удаленного сервера
$curl=curl_init('http://www.php.net');
//устанавливаем параметры соединения
curl_setopt($curl, CURLLOPT_RETURNTRANSFER, 1);
//получаем содержимое страницы
$content=curl_exec($curl);
//закрываем CURL-соединение
curl_close($curl);
echo $content;
?>

В окне веб-браузера это будет выглядеть ТАК.

При помощи функции curl_init() задается адрес удаленного сервера и путь к файлу на нем. В отличии от функции fsockopen(), необходимо задать адрес полностью, включая префикс http://, т.к. расширение CURL позволяет работать с несколькими видами протоколов (HTTP, HTTPS, FTP). Если соединение с указанным сервером проходит успешно, функция curl_init() возвращает дескриптор соединения, который используется в качестве параметра во всех остальных функциях библиотеки.

Функция curl_setopt() позволяет задать параметры текущего соединения и имеет следующий синтаксис:

bool curl_setopt ($curl, $option, $value)

Функция устанавливает для соединения, имеющего дескриптор $curl, параметр $option со значением $value. В качестве параметра $option используются константы, определенные в ниже следующих таблицах. Если параметр успешно установлен, функция возвращает true, в противном случае — false.

Запрос выполняет функция curl_exec(). В нашем примере, содержимое запрашиваемой страницы возвращается в виде строки $content (такое поведение определяется константой CURLLOPT_RETURNTRANSFER, установленной ранее при помощи функции curl_setopt()).

В завершение функция curl_close() закрывает установленное ранее CURL-соединение.

Таблица. Логические параметры CURL-соединения
Параметр Описание
CURLOPT_AUTOREFERER При установке этого параметра в true, если осуществляется следование HTTP-заголовку Locanion, HTTP-заголовок Referer устанавливается автоматически
CURLOPT_COOKIESESSION При установке этого параметра в true CURL игнорирует все сессионные cookie (хранящиеся в оперативной памяти и лишь до момента закрытия браузера)
CURLOPT_CRLF При установке этого параметра в true UNIX-переводы строк \n автоматически преобразуется к виду \r\n
CURLOPT_DNS_USE_GLOBAL_CACHE При установке этого параметра в true используется глобальный DNS-кэш
CURLOPT_FAILONERROR При установке этого параметра в true получение HTTP -кода более 300 считается ошибкой
CURLOPT_FILETIME При установке этого параметра в true CURL пытается получить дату последней модификации загружаемого документа
CURLOPT_FOLLOWLOCATION При установке этого параметра в true при получении HTTP-заголовка Locanion будет происходить перенаправление на указанный этим заголовком URL (это действие выполняется рекурсивно, для каждого полученного заголовка Locanion)
CURLOPT_FORBID_REUSE При установке этого параметра в true CURL-соединение завершается сразу после выполнения функции curl_exec(); повторное использование дескриптора соединения не допускается
CURLOPT_FRESH_CONNECT При установке этого параметра в true для повторной операции curl_exec() CURL требует создания нового соединения, не используя кэширования
CURLOPT_FTPAPPEND При установке этого параметра в true данные будут добавляться к файлу на FTP сервере, в противном случае файл будет перезаписан
CURLOPT_FTRASCII При установке этого параметра в true данные с FTP сервера будут передаваться не в бинарном, а в текстовом (ASCII) виде
CURLOPT_FTPLISTONLY При установке этого параметра в true будет получен список файлов в текущей директории FTP сервера
CURLOPT _HEADER При установке этого параметра в true результат будет включат полученные HTTP-заголовки
CURLOPT_HTTPPROXYTUNNEL При установке этого параметра в true данные будут передаваться через прокси-сервер
CURLOPT_MUTE При установке этого параметра в true все сообщения CURL будут подавляться
CURLOPT_NETRC При установке этого параметра в true будет осуществлена попытка найти имя пользователя и пароль к удаленному серверу в файле ~/netrc (где ~ — домашний каталог)
CURLOPT_NOBODY При установке этого параметра в true результат не будет включать документ. Часто используется для того, чтобы получить только HTTP-заголовки
CURLOPT_NOPROGRESS При установке этого параметра в true не будет выводиться индикатор прогресса операции (по умолчанию установлен)
CURLOPT_POST При установке этого параметра в true отправляется POST-запрос типа application/x-www-form-urlencoded
CURLOPT_PUT При установке этого параметра в true будет производиться закачка файла методом PUT протокола HTTP. Файл задается параметрами CURLOPT_INFILE и CURLOPT_INFILESIZE. Впрочем метод PUT на большинстве серверов запрещен к использованию
CURLOPT_RETURNTRANSFER При установке этого параметра в true CURL будет возвращать результат, а не выводит его
CURLOPT_SSL_VERIFYPEER При установке этого параметра в false запрещается проверка сетификата удаленного сервера. Дополнительные сертификаты можно задать с помощью параметра CURLOPT_CAINFO. Можно также указать путь к файлам сетрификатов в параметре CURLOPT_SSL_VERIFYPEER установлен в 0, возможно потребуется установить в 1 или 0 также CURLOPT_SSL_VERIFYHOST (по умолчанию 2)
CURLOPT_UNRESTRICTED_AUTH При установке этого параметра в true имя пользователя и пароль сохраняются и передаются серверу при следовании HTTP-заголовку Locanion, даже если осуществляется переход на другой сайт
CURLOPT_UPLOAD При установке этого параметра в true производится закачка файла на удаленный сервер
CURLOPT_VERBOSE При установке этого параметра в true выводятся подробные сообщения обо всех производимых действиях
Таблица. Целочисленные параметры CURL-соединения
Параметр Описание
CURLOPT_BUFFERSIZE Размер буфера, используемого для чтения документа с удаленного сервера
CURLOPT_CONNECTTIMEOUT Количество секунд перед попыткой соединения с сервером. По умолчанию имеет значение 0
CURLOPT_DNS_CACHE_TIMEOUT Количество секунд, в течении которых хранится запись в DNS-кэше. По умолчанию имеет значение 120 (2 минуты)
CURLOPT_HTTP_VERSION Версия HTTP-протокола; допустимы три значения: CURL_HTTP_VERSION_NONE (версия выбирается автоматически), CURL_HTTP_VERSION_1_0 (используется HTTP1.0), CURL_HTTP_VERSION_1_1 (используется HTTP1.1)
CURLOPT_HTTPAUTH Метод(ы) HTTP-аутентификации; допустимые значения: CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY, CURLAUTH_ANYSAFE
CURLOPT_INFILESIZE Размер файла при его загрузке на удаленный сервер
CURLOPT_LOW_SPEED_LIMIT Минимальная скорость передачи в байтах в секунду. Если в течение периода времени, заданного параметром CURLOPT_LOW_SPEED_TIME, скорость передачи станет меньше этого значения, операция будет прервана
CURLOPT_LOW_SPEED_TIME Время в секундах, в течение которого скорость передачи должна быть не ниже, чем CURLOPT_LOW_SPEED_LIMIT, чтобы операция была признана слишком медленной и прервана
CURLOPT_MAXCONNECTS Максимальное количество постоянных соединений
CURLOPT_MAXREDIRS Максимальное количество переходов по заголовку Locanion. Параметр используется совместно с CURLOPT_FOLLOWLOCATION
CURLOPT_PORT Альтернативный номер порта для соединения
CURLOPT_PROXYAUTH Метод(ы) аутентификации на прокси-сервере; принимает тн же значения, что и параметр CURLOPT_HTTPAUTH
CURLOPT_PROXYPORT Номер порта для соединения с прокси-сервером; используется совместно с CURLOPT_PROXY
CURLPOPT_PROXYTYPE Тип прокси-сервера; устанавливать соединение через HTTP-протокол (CURLPROXY_HTTP) или через сокет (CURLPROXY_SOCKS5)
CURLOPT_RESUME_FROM Задает в файле позицию байта, с которого начинается передача данных
CURLOPT_SSL_VERIFYHOST Скорость проверки имени, указанного в сертификате удаленного сервера (при установке SSL-соединения): 1 — предполагает только проверку существующего имени; 2 — кроме того, и проверку соответствия имени хоста
CURLOPT_SSLVERSION Версия SSL; допустимые значения 2 и 3. По умолчанию версия SSL определяется автоматически, но в некоторых случаях требуется явное указание
CURLOPT_TIMECONDITION Способ интерпретации значения параметра CURLOPT_TIMEVALUE. Допустимые значения: TIMECOND_IFMODSINCE и TIMECOND_ISUNMODSINCE. Применяется только для протокола HTTP
CURLOPT_TIMEOUT Максимальное время выполнения операции в секундах
CURLOPT_TIMEVALUE Время в секундах, прошедшее с полуночи 1 января 1970 года. Значение будет использовано в соответствии со значением параметра CURLOPT_TIMECONDITION (по умолчанию TIMECOND_IFMODSINCE)
Таблица. Строковые параметры CURL-соединения
Параметр Описание
CURLOPT_CAINFO Имя файла, содержащего один или более сертификатов, которые будут использоваться при проверке подлинности удаленного сервера. Имеет значение только совместно с параметром CURLOPT_SSL_VERIFYPEER
CURLOPT_CAPATH Путь к директории с сертификатами. Имеет значение только совместно с параметром CURLOPT_SSL_VERIFYPEER
CURLOPT_COOKIE Содержимое HTTP-заголовка Cookie. для установки нескольких значений cookie можно использовать несколько вызовов функции curl_setopt()
CURLOPT_COOKIEFILE Имя сайта, содержащего данные cookie. Данные могут быть либо в формате Netscape, либо HTTP-заголовка
CURLOPT_COOKIEJAR Имя файла, в который сохраняются не сессионные cookie, доступные при следующем сеансе соединения с сервером
CURLOPT _CUSTOMREQUEST Метод, который будет использован в HTTP-запросе вместо GET или HEAD. Используется для отправки запросов DELETE или других, редко используемых. Допустимыми значениями являются GET, POST и т.д.
CURLOPT_ENCODING Значение HTTP-заголовка Accert-Encoding, задающего метод сжатия HTTP-ответа. Допустимые значения: identity, deflate, gzip
CURLOPT_FTPPORT Значение IP-адреса для команды PORT протокола FTP. Допустимые значения: IP-адрес, имя хоста,имя сетевого интерфейса (под UNIX), или просто '-' для использования IP-адреса по умолчанию
CURLOPT_INTERFACE Имя используемого сетевого интерфейса. Может быть именем интерфейса IP-адресом или именем хоста
CURLOPT_KRB4LEVEL Уровень безопасности KRB4 (Kerberos 4) для протокола FTP. Допустимы следующие значения (в порядке возростания безопастности): clear, safe, confidential, private . Если переданное значение не входит в этот список, используется private. Установка праметра NULL запрещает безопастность KRB4
CURLOPT_POSFIELDS Строка данных для POST-запроса
CURLOPT_PROXY Имя прокси-сервера, через который будут направляться запросы
CURLOPT_PROXYUSERPWD Строка с именем пользователя и паролем к прокси -серверу HTTP в виде [username]:[password]
CURLOPT_RANDON_FILE Путь к файлу используемому генератором случайных чисел для работы протокола SSL
CURLOPT_RANGE Координаты фрагмента загружаемого файла в формате "X-Y" (вместо X и Y указывается позиция в файле). Одна из координат может быть опущена, например: "X-". Протокол HTTP также поддерживает передачу нескольких фрагментов файла, это задается в виде "X_Y, N_M"
CURLOPT_REFERER Значение HTTP-заголовка Referer
CURLOPT_SSL_CIPHER_LIST Список шифров, используемых SSL, например: RC4-SNA, TLSv1
CURLOPT_SSLCERT Имя файла с SSL-сертификатом в формате РЕМ
CURLOPT_SSLCERTPASSWD Пароль к файлу SSL-сертификата, заданному параметром CURLOPT_SSLCERT
CURLOPT_SSLCERTTYPE Формат сертификата. Допускаются следующие форматы: PEM (по умолчанию), DER и ENG
CURLOPT_SSLKEY Имя файла, содержащего закрытый SSL-ключ
CURLOPT_SSLKEYPASSWD Секретный пароль, необходимый для использования закрытого SSL-ключа
CURLOPT_SSLKEYTYPE Формат закрытого SSL-ключа. Допускаются следующие форматы: PEM (по умолчанию), DER и ENG
CURLOPT_URL URL, с которого будет производится операция. Значение этого параметра также может быть задано при вызове функции curl_init()
CURLOPT_USERAGENT Задает значение HTTP-заголовка User-Agent
CURLOPT_USERPWD Строка с именем пользователя и паролем в виде [username]:[password]
Таблица. Параметры CURL-соединения, являющиеся массивами
Параметр Описание
CURLOPT_HTTP200ALIASES Массив с HTTP-заголовками группы 200 (успешно выполненный запрос)
CURLOPT_HTTPHEADER Массив со всеми HTTP-заголовками
CURLOPT_POSTQUOTE Массив с FTP-командами, которые будут выполнены после выполнения основного запроса
CURLOPT_QUOTE Массив с FTP-командами, которые будут выполнены после выполнения основного запроса
Таблица. Параметры CURL-соединения, используемые в качестве значений дескриптора файла, возвращаемого функцией fopen()
Параметр Данные, хранимые в файле
CURLOPT_FILE Результат операции
CURLOPT_INFILE Данные для передачи
CURLOPT_WRITEHEADER Полученные HTTP-заголовки
CURLOPT_STDERR Сообщения об ошибках

Если не задан ни один из параметров CURLOPT_RETURNTRANSFER, CURLOPT_FILE или CURLOPT_WRITEHEADER, функция curl_exec() по умолчанию выводит результат непосредственно в окно браузера. Так как результат запроса необходимо вывести непосредственно в браузер, можно не устанавливать никаких параметров.

Альтернативное решение

<?php
//задаем адрес удаленного сервера
$curl=curl_init('http://www.php.net');
//получает содержимое страницы
echo curl_exec($curl);
//закрываем CURL-соединение
curl_close($curl);
?>

В окне веб-браузера это будет выглядеть ТАК.