Curl (Client URLs) это клиентская библиотека для работы с URL. PHP поддерживает библиотеку через расширение libcurl. Чтобы включить поддержку libcurl при установке PHP, добавьте параметр –with-curl=[расположение библиотек curl] перед компиляцией. Пакет Curl должен быть установлен до PHP.
Большинство основных функций, которые требуются при подключении к удаленным веб-серверам, содержатся в Curl, включая POST и GET для отправки форм, SSL поддержку, HTTP-аутентификацию и обработку сессии и куки.
Чтобы запустить curl сессию используйте функцию curl_init(). Параметры curl сессии задаются через PHP функцию curl_setopt(). После установки параметров запрос выполняется с помощью функции curl_exec().
Пример:
<?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec();
curl_close($ch);
?>
В этом примере мы сначала установили дескриптор сессии в $ch. Затем командой curl_setopt мы задали URL запроса http://www.example.com. Заголовок CURLOPT_HEADER определяет, должен ли возвращаться заголовок ответа сервера. По умолчанию curl будет выводить ответ прямо в браузер при выполнении сценария. Чтобы противостоять этому мы включили параметр CURLOPT_RETURNTRANSFER. Теперь при выполнении оператора curl_exec() возвращаемые с удаленного сервера данные будут сохраняться в переменной $data, а не выводиться в браузер.
Curl и данные формы
Теперь, когда мы можем получать статические страницы с удаленных серверов, давайте попробуем автоматически отправить сообщение через веб-формы. Методом по умолчанию для отправки форм в curl является GET. В следующем примере мы отправим текстовое сообщение на наш мобильный телефон с помощью веб-формы. Наш пример веб-формы требует, чтобы данные были представлены в POST формате, и содержит поля pNUMBER , MESSAGE, SUBMIT.
<?
$phoneNumber = '4045551111';
$message = 'This message was generated by curl and php';
$curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/sendSMS.php');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec();
curl_close($ch);
?>
Здесь мы заполняем переменные формы для номера телефона и сообщения. Переменная $curlPost используется для хранения POST данных, с которыми будет работать curl. При формировании переменной $curlPost, которая будет затем использоваться в curl_setopt, не забудьте перекодировать данные с помощью функции urlencode перед тем как передать их в функцию curl_setopt. CURLOPT_POST это параметр, который указывает curl, что для отправки будет использоваться метод POST. Параметр CURLOPT_POSTFIELDS используется для хранения POST данных.
Curl и прокси-сервера
Как и во всех других полнофункциональный браузерах, в curl есть поддержка прокси-серверов. Прокси-сервер это буфер между клиентом, выполняющим запрос, и веб-сервером. Прокси-серверы используются для различных целей, включая компании, ограничивающие доступ к Интернету для тех пользователей, которые хотят делать это анонимно.
В curl можно установить несколько параметров для работы с прокси-серверами. Во-первых, чтобы разрешить использование прокси-серверов в curl используйте параметр CURLOPT_HTTPPROXYTUNNEL. Затем настройте прокси-сервер с помощью параметра CURLOPT_PROXY. Если необходимо настроить данные для аутентификации, используйте параметр CURLOPT_PROXYUSERPWD. Данный параметр ожидает строку в формате user:password. По умолчанию используются HTTP прокси, для использования SOCKS прокси применяйте параметр CURLOPT_PROXYTYPE.
Пример:
<?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, 'fakeproxy.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
$data = curl_exec();
curl_close($ch);
?>
SSL
Чтобы включить SSL просто измените http:// на https:// в параметре CURLOPT_URL. При работе с SSL в curl наиболее часто используется параметр CURLOPT_SSL_VERIFYHOST, который при значении 1 проверяет существование общего имени в сертификате, а при значении 2 он проверяет существование общего имени и соответствие общего имени в сертификате имени хоста сервера. Параметр CURLOPT_SSLVERSION может применяться для переключения между SSL версиями 2 и 3, это, как правило, автоматически согласовывается в PHP.
Cookies
Curl также включает в себя поддержку Cookies. Работать с Cookie в curl очень просто. В curl есть три встроенных параметра – CURLOPT_COOKIE, CURLOPT_COOKIEJAR и CURLOPT_COOKIEFILE. Параметр CURLOPT_COOKIE используется для установки куки для текущей сессии. CURLOPT_COOKIEJAR хранит расположение файла для полученных куки, когда сессия закрыта. CURLOPT_COOKIEFILE хранит расположение файла, содержащего куки, при использовании формата Netscape или сырых заголовков HTTP.
Аутентификация с curl
Поддерживаются все популярные методы HTTP аутентификации, включая базовую HTTP аутентификацию, дайджест, GSS и NTLM. Как и для других настроек, используется функция curl_setopt. Для установки метода аутентификации выполните curl_setopt(CURLOPT_HTTPAUTH, CURLAUTH_BASIC), при этом будет задана базовая аутентификация. Различные типы аутентификации могут быть заданы с помощью селектора | “или”. Учетные данные устанавливаются с помощью curl_setopt(CURLOPT_USERPWD, ‘[username]:[password]‘).
Другие параметры аутентификации включают CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM для дайджеста, GSS и NTLM соответственно. Наряду с этими параметрами существует также CURLAUTH_ANY, который является псевдонимом CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM и CURLAUTH_ANYSAFE – псевдоним для CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.
Пример 1:
<?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(CURLOPT_USERPWD, '[username]:[password]')
$data = curl_exec();
curl_close($ch);
?>
Пример 2:
<?
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt(CURLOPT_USERPWD, '[username]:[password]')
$data = curl_exec();
curl_close($ch);
?>
В первом примере мы просто пытаемся пройти проверку подлинности с базовой аутентификацией, но во втором примере мы собираемся попробовать все возможные методы аутентификации.
Комментариев к записи: 1
Анатолий
9 Август 2013 в 6:35 дп
Довольно интересная статья. Спасибо! Curl и вправду творит чудеса.