Помимо сокетов и потоков, обеспечивающих низкоуровневое обращение к серверу, PHP располагает специальным расширением CURL (Client URL Library).
Расширение предоставляет более широкие средства управления сетевыми операциями.
Подключение расширений
Для установки расширения в операционной систем Windows необходимо отредактировать конфигурационный файл php.ini, раскомментировав строку extension=php_curl.dll
В случае Ubuntu установить расширение можно при помощи команды $ sudo apt-get install php7-curl
Для Mac OS X можно воспользоваться менеджером пакетов Homebrew, указав директи-ву --with-curl при установке $ brew install php70 --with-curl либо отдельно установив расширение при помощи команды $ brew install php70-curl
ЗАМЕЧАНИЕ
Для того, чтобы функции библиотеки CURL были доступны из PHP-скрипта, в конфигурационном файле php.ini необходимо подключить расширение php_curl.dll, сняв комментарий (точка с запятой ;) c директивы extension. Помимо этого нужно скопировать библиотеки ssleay32.dll и libeay32.dll из каталога, где расположен PHP, в папку, прописанную в переменной окружения PATH, например, в C:\Windows\system32.
Параметры CURL-соединения
Тип | Описание |
---|---|
CURLOPT_AUTOREFERER | При установке этого параметра в true, если осуществляетсяследование HTTP-заголовку Location, HTTP-заголовок Referer устанавливается автоматически |
CURLOPT_CRLF | При установке этого параметра в true UNIX-переводы строк \n автоматически преобразуются к виду \r\n |
CURLOPT_HEADER | При установке этого параметра в true результат будет включать полученные HTTP-заголовки |
CURLOPT_NOBODY | При установке этого параметра в true результат не будет включать документ. Часто используется для того, чтобы получить только HTTP-заголовки |
CURLOPT_POST | При установке этого параметра в true отправляется POST-запрос типа application/x-www-form-urlencoded |
CURLOPT_PUT | При установке этого параметра в true будет производиться закачка файла методом PUT протокола HTTP. Файл задается параметрами CURLOPT_INFILE и CURLOPT_INFILESIZE. Впрочем, метод PUT на большинстве серверов запрещен к использованию |
CURLOPT_RETURNTRANSFER | При установке этого параметра в true CURL будет возвращать результат, а не выводить его |
CURLOPT_UPLOAD | При установке этого параметра в true производится закачка файла на удаленный сервер |
CURLOPT_HTTP_VERSION | Версия HTTP-протокола; допустимы три значения: CURL_HTTP_VERSION_NONE (версия выбирается автоматически), CURL_HTTP_VERSION_1_0 (используется HTTP 1.0), CURL_HTTP_VERSION_1_1 (используется HTTP 1.1) |
CURLOPT_HTTPAUTH | Метод (методы) HTTP-аутентификации; допустимые значения: CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY и CURLAUTH_ANYSAFE |
CURLOPT_INFILESIZE | Размер файла при его загрузке на удаленный сервер |
CURLOPT_COOKIE | Содержимое HTTP-заголовка Cookie. Для установки нескольких значений cookie можно использовать несколько вызовов функции curl_setopt() |
CURLOPT_COOKIEFILE | Имя файла, содержащего данные cookie |
CURLOPT_COOKIEJAR | Имя файла, в который сохраняются несессионные cookies, доступные при следующем сеансе соединения с сервером |
CURLOPT_RANGE | Координаты фрагмента загружаемого файла в формате “X-Y” (вместо X и Y указываются позиции байта в файле). Одна из координат может быть опущена, например: “X-”. Протокол HTTP также поддерживает передачу нескольких фрагментов файла, это задается в виде “X-Y,N-M”. Используется для загрузки файла с точки последнего обрыва связи |
CURLOPT_REFERER | Значение HTTP-заголовка Referer |
CURLOPT_URL | URL, с которым будет производиться операция. Значение этого параметра также может быть задано при вызове функции curl_init() |
CURLOPT_USERAGENT | Задает значение HTTP-заголовка User-Agent |
CURLOPT_USERPWD | Строка с именем пользователя и паролем в виде [username]:[password] |
CURLOPT_HTTPHEADER | Массив со всеми HTTP-заголовками |
Использование CURL. Файл curl.php
Получение HTTP-заголовков. Файл headers.php
"; ?>"; print_r($out); echo "
Обращение к серверу точного времени. Файл time.php
////////////
Отправка данных методом POST. Файл post.php
HTML-форма. Файл form.html
Форма
POST-обработчик формы. Файл handler.php
"; echo "Пароль - ".htmlspecialchars($_POST['pass'])."
"; } ?>
Остается только удалить HTTP-заголовки, и результат будет идентичен обращению к обработчику из HTML-формы.
ЗАМЕЧАНИЕ
Такого рода скрипты используются для автопостинга — автоматического размещения рекламных или провокационных сообщений в гостевых книгах и форумах в значительных количествах. Самым эффективным способом защиты от такого вида атак является автоматическая генерация изображения с кодом, который помещается в сессию. Пока пользователь не введет код в HTML-форму, сервис не срабатывает. Изображение может быть дополнено помехами, которые не помешают его прочитать "живому" посетителю, но потребуют от злоумышленника решения серьезной задачи распознавания образов.
////////////
При обращении PHP-скрипта к страницам сайта при помощи файловых функций сервер делает в переменную окружения USER_AGENT запись вида: PHP 5.3. Вид этой записи определяется директивой user_agent конфигурационного файла php.ini. В результате скрипт получает доступ к этому идентификатору через элемент суперглобального массива $_SERVER['USER_AGENT']. Однако этот способ проверки не может считаться универсальным, т. к. переменную окружения устанавливает клиент при помощи HTTP-заголовка User-Agent. Любой HTTP-заголовок, который передает клиент, может быть изменен.
Передача пользовательского агента. Файл user_agent.php
на главную сниппетов