Использование curl

Привет, в этой статье рассмотрим использование curl и библиотеки Libcurl.

использование curl

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.

В общем виде использование библиотеки сводиться к четырем шагам:

  1. Создание ресурса CURL c помощью функции curl_init.
  2. Установка параметров c помощью функции curl_setopt.
  3. Выполнение запроса c помощью функции curl_exec.
  4. Освобождение ресурса 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);

2032