Что такое 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:\windows\system для Windows 9x/Me c:\winnt\system32 для Windows NT/2000 c:\windows\system32 для Windows XP.
После этого необходимо раскомментировать строку
;extension=php_curl.dll
в файле php.ini, либо подгружать модуль динамически, во
время работы скрипта.
<?php
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 страницы и выводит
их на экран
<?php
$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-сессии.
<?php
// Поиск книг на сервере 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;
?>
<?php
// 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;
?>
<?PHP
// 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 для
получения отчета о последнем выполненном запросе:
<?php
print_r(curl_getinfo($ch));
echo "\n\ncURL error number:" .curl_errno($ch);
echo "\n\ncURL error:" . curl_error($ch);
// ...close cURL handle ($ch) below
?>
Решение о том, что использовать: cURL или libcurl, - стоит
принимать в зависимости от обстоятельств. В случае, если Вы
пишете выполняемый из командной строки скрипт, либо у Вашего
провайдера нет поддержки libcurl, имеет смысл использовать
cURL. В остальных случаях использование libcurl оказывается
более удобным.
|