1. Вступление 2. Что такое cURL и libcurl 3. Инсталляция cURL 4. Пример использования cURL 5. Пример использования cURL в php Вступление
Это руководство предназначено для тех web-разработчиков, которые хотят автоматизировать передачу файлов по сети либо взаимодействовать с другими Интернет - сервисами. Для чтения этой главы вам необходимо владеть пониманием принципа работы стратегии клиент - сервер и знать основы синтаксиса PHP.
cURL и libcurl - библиотеки, позволяющие серверу передавать файлы на удаленный компьютер, используя множество Интернет протоколов. Библиотеки имеют очень гибкую настройку и позволяют выполнить практически любой удаленный запрос. Используя их, web-сервер может выступать полноценным клиентом любого основанного на HTTP протоколе сервисе, к примеру: XML-RPC, SOAP, или WebDAV.
В этой статье будет рассказано о том, что такое cURL, как его использовать из командной строки, и о его применении в PHP. Что такое cURL и libcurl
cURL является сокращением от "Client URLs". Он был разработан Daniel Stenberg в 1998 году как утилита, работающая из командной строки. Libcurl - переносимая библиотека, предоставляющая простой API-интерфейс к функциональности cURL. Библиотека безопасна в мультипоточной среде, совместима с IPv6 и поддерживает постоянные соединения. Интерфейс взаимодействия с php был добавлен Sterling Hughes.
cURL и libcurl могут использоваться для передачи информации с использованием таких протоколов, как HTTPS, FTP, FTPS, GOPHER, LDAP, DICT, TELNET и FILE. Реализована поддержка практически всех *nix систем, а также Windows, OS/2, BeOS и некоторых других.
Библиотека curl - Open Source продукт с оригинальной MIT/X лицензией, позволяющей использовать этот пакет в любых: как коммерческих, так и некоммерческих целях, включать ее в свой дистрибутив (даже если он распространяется без открытого исходного кода).
Необходимо понимать, что cURL не имеет ничего общего с Curl Corporation, являющейся коммерческим производителем языка программирования Curl. Инсталляция cURL
Для работы в PHP версии 4.2.3 и выше вам необходим cURL версии не ниже 7.9.0. Для работы в PHP версии 4.3.0 и выше вам необходим cURL версии не ниже 7.9.8. Windows
Как и любой другой дополнительный модуль, он требует проинсталлированного дистрибутива PHP. Для установки cURL скопируйте файлы php4ts.dll, ssleay32.dll, php_curl.dll, msvcrt.dll из каталога DLL в системную директорию Windows, как правило, это: c:windowssystem для Windows 9x/Me c:winntsystem32 для Windows NT/2000 c:windowssystem32 для Windows XP.
После этого необходимо раскомментировать строку ;extension=php_curl.dll
в файле php.ini, либо подгружать модуль динамически, во время работы скрипта.
dl("php_curl.dll"); ?> Unix
Ближайшее зеркало, содержащее исходные коды и откомпилированные бинарные файлы для различных операционных систем, вы можете найти на сайте http://curl.haxx.se/.
Поскольку cURL использует библиотеку openssl для SSL соединений, вначале необходимо установить на север SSL. В случае, если при инсталляции cURL библиотека openssl найдена не будет, произойдет установка cURL без поддержки SSL соединений.
Инсталляция cURL состоит из следующих шагов: ./configure, make, make install.
После этого необходимо пересобрать PHP c опцией --with-curl
О том, включена ли поддержка cURL в php, вы можете узнать, выполнив phpinfo(). Пример использования cURL
Использование cURL из командной строки очень просто. Следующий пример запрашивает web-страницу и выводит ее в stdout $ curl -L zend.com
M(опция -L разрешает переадресации)
Также возможно использование cURL из командной строки при помощи PHP. Следующий пример запрашивает 3 страницы и выводит их на экран
$var = echo shell_exec("/usr/bin/curl -L http://www.zend.com http://zend.com/developers.php http://zend.com/zend/tut/"); ?> Пример использования cURL в PHP
Использование libcurl в php-скрипте является достаточно простым, особенно для таких операций, как генерация POST-запросов.
Для использования libcurl необходимо выполнить следующие шаги: Инициализировать сессию cURL Установить опции cURL (порядок установки опций не имеет значения) Выполнить запрос Завершить сессию cURL
Для демонстрации вышеперечисленного приведем практические примеры использования cURL для генерации POST-запроса, HTTP-авторизации, FTP-сессии.
// Поиск книг на сервере amazon.com $url = "http://www.amazon.com/exec/obidos/search-handle-form/002-5640957-2809605"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); // set url to post to curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable curl_setopt($ch, CURLOPT_TIMEOUT, 3); // times out after 4s curl_setopt($ch, CURLOPT_POST, 1); // set POST method curl_setopt($ch, CURLOPT_POSTFIELDS, "url=index%3Dbooks&field-keywords=PHP+MYSQL"); // add POST fields $result = curl_exec($ch); // run the whole process curl_close($ch); echo $result; ?>
// HTTP authentication $url = "http://www.example.com/protected/"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword"); $result = curl_exec($ch); curl_close($ch); echo $result; ?> // FTP this script to a server $fp = fopen(__FILE__, "r"); $url = "ftp://username:password@mydomain.com:21/path/to/newfile.php"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_INFILE, $fp); curl_setopt($ch, CURLOPT_FTPASCII, 1); curl_setopt($ch, CURLOPT_INFILESIZE, filesize(__FILE__)); $result = curl_exec($ch); curl_close($ch); ?>
При возникновении проблем в использовании cURL необходимо добавить следующие строки перед вызовом curl_close для получения отчета о последнем выполненном запросе:
print_r(curl_getinfo($ch)); echo "nncURL error number:" .curl_errno($ch); echo "nncURL error:" . curl_error($ch); // ...close cURL handle ($ch) below ?>
Решение о том, что использовать: cURL или libcurl, - стоит принимать в зависимости от обстоятельств. В случае, если Вы пишете выполняемый из командной строки скрипт, либо у Вашего провайдера нет поддержки libcurl, имеет смысл использовать cURL. В остальных случаях использование libcurl оказывается более удобным.
|