Использование Curl для отправки запросов удаленным серверам

Категория: Веб-программирование| Полезные заметки

19 Авг 2011

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);
 ?>

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

Кстати, очень интересно:

Опубликовать в twitter.com Опубликовать в своем блоге livejournal.com Поделится ссылкой на yandex.ru

Комментариев к записи: 1

Анатолий

9 Август 2013 в 6:35 дп

Довольно интересная статья. Спасибо! Curl и вправду творит чудеса.

Написать комментарий

Вы должны Войти, чтобы оставить комментарий.

О блоге

Данный блог создан с целью помочь, как начинающему вебмастеру, так и опытному разработчику, в решении проблем возникающих при разработке сайтов. Здесь Вы прочитаете полезные статьи о том, как грамотно произвести SEO оптимизацию своего сайта, и найдёте важные исследования в сфере интернет-маркетинга. Научитесь писать собственные компоненты и модули для известных CMS, а также узнаете интересные методы работы с Фреймворками, CSS, HTML, jQuery и PHP. Из записей блога вы поймёте как грамотно разрабатывать макеты сайтов и что такое валидная вёрстка. БЛОГZOR – поможет Вам стать web-Гуру и понять тонкости веб-мастеринга.

Последние комментарии

  • Амир: форма появилась на сайте, но письмо не приходит на [...]
  • Ян: Все нравится, единственное, раскрывающийся блок мо [...]
  • СПАСИБО!: Спасибо тебе! Замечательная функция. очень помогла [...]
  • Алексей: Подскажите, а как заставить этот скрипт отработать [...]
  • Дмитрий: Заработало, надо было малость поменять путь в conf [...]

Можно Скачать