Помимо сокетов, обеспечивающих низкоуровневое обращение к серверу, РНР располагает специальным расширением 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);
?>
В окне веб-браузера это будет выглядеть ТАК.