Библиотека 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-соединение.
Параметр | Описание |
---|---|
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 выводятся подробные сообщения обо всех производимых действиях |
Параметр | Описание |
---|---|
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) |
Параметр | Описание |
---|---|
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] |
Параметр | Описание |
---|---|
CURLOPT_HTTP200ALIASES | Массив с HTTP-заголовками группы 200 (успешно выполненный запрос) |
CURLOPT_HTTPHEADER | Массив со всеми HTTP-заголовками |
CURLOPT_POSTQUOTE | Массив с FTP-командами, которые будут выполнены после выполнения основного запроса |
CURLOPT_QUOTE | Массив с FTP-командами, которые будут выполнены после выполнения основного запроса |
Параметр | Данные, хранимые в файле |
---|---|
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);
?>
В окне веб-браузера это будет выглядеть ТАК.
Комментарии(0)
Для добавления комментариев надо войти в систему и авторизоватьсяКомментирование статей доступно только для зарегистрированных пользователей:Зарегистрироваться