Привет, в этой статье рассмотрим использование curl и библиотеки Libcurl.
cURL – свободная (распространяемая по лицензии MIT), кроссплатформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Оригинальным автором является Дэниел Стенберг (Daniel Stenberg). Общее число разработчиков превышает 1300.
Libcurl – это библиотека API для передачи, которую разработчики могут встроить в свои программы; cURL действует как автономная обёртка для библиотеки libcurl. libcurl используется, чтобы обеспечить возможность передачи файлов (адресуемых с помощью URL) многочисленным приложениям (как открытым, так и коммерческим).
Для libcurl имеются модули интеграции для работы с более чем 30 языками программирования.
Библиотека CURL (Client URLs) позволяет передавать файлы на удаленный компьютер, используя множество Интернет протоколов. Она имеет очень гибкую настройку и позволяют выполнить практически любой удаленный запрос.
CURL поддерживает протоколы HTTP, HTTPS, FTP, FTPS, DICT, TELNET, LDAP, FILE, и GOPHER, так же как HTTP-post, HTTP-put, cookies, FTP-закачкe, продолжение прерванной передачи файлов, пароли, номера портов, сертификаты SSL, Kerberos и прокси.
Используя CURL, web-сервер может выступать полноценным клиентом любого основанного на HTTP протоколе сервисе, к примеру: XML-RPC, SOAP, или WebDAV.
В общем виде использование библиотеки сводиться к четырем шагам:
- Создание ресурса CURL c помощью функции curl_init.
- Установка параметров c помощью функции curl_setopt.
- Выполнение запроса c помощью функции curl_exec.
- Освобождение ресурса CURL c помощью функции curl_close.
Простой пример использования CURL
// Инициализация библиотеки curl if ($ch = @curl_init()) { // Устанавливаем URL запроса @curl_setopt($ch, CURLOPT_URL, 'http://server.com/'); // При значении true CURL включает в вывод заголовки @curl_setopt($ch, CURLOPT_HEADER, false); // Куда помещать результат выполнения запроса: // false - в стандартный поток вывода, // true - в виде возвращаемого значения функции curl_exec. @curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Максимальное время ожидания в секундах @curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); // Установим значение поля User-agent @curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://blog.yousoft.ru)'); // Выполнение запроса $data = @curl_exec($ch); // Вывести полученные данные echo $data; // Освобождение ресурса @curl_close($ch); }
Использование cURL для создания GET запроса
$ch = curl_init(); // GET запрос указывается в строке URL curl_setopt($ch, CURLOPT_URL, 'http://server.com/?s=CURL'); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://mysite.ru)'); $data = curl_exec($ch); curl_close($ch);
Отправка GET запроса ничем не отличается от получения страницы. Важно заметить, что строка запроса формируется следующим образом:
http://server.com/index.php?name1=value1&name2=value2&name3=value3
где
http://server.com/index.php
— адрес страницы, nameX — название переменной, valueX — значение переменной.
Пример использования POST запроса
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://server.com/index.php'); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Нужно явно указать, что будет POST запрос curl_setopt($ch, CURLOPT_POST, true); // Здесь передаются значения переменных curl_setopt($ch, CURLOPT_POSTFIELDS, 's=CURL'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_USERAGENT, 'PHP Bot (http://mysite.ru)'); $data = curl_exec($ch); curl_close($ch);
Отправка POST запроса не многим отличается от отправки GET запроса. Все основные шаги остаются такие же. Переменные также задаются парами:
name1=value1&name2=value2
.
Пример HTTP-авторизации
// HTTP авторизация $url = "http://server.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-сессии
$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 "cURL error number:".curl_errno($ch)." "; echo "cURL error:".curl_error($ch)." "; curl_close($ch);
3948