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

Библиотека 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

<?php 
  // Иницализация библиотеки curl 
  if ($ch = @curl_init()) 
  { 
    // Устанавливаем URL запроса 
    @curl_setopt($ch, CURLOPT_URL, 'https://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 (https://blog.yousoft.ru)'); 
    // Выполнение запроса 
    $data = @curl_exec($ch); 
    // Вывести полученные данные 
    echo $data; 
    // Особождение ресурса 
    @curl_close($ch); 
  } 
?>

Пример использования GET запроса

<?php 
  $ch = curl_init(); 
  // GET запрос указывается в строке URL 
  curl_setopt($ch, CURLOPT_URL, 'https://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 (https://mysite.ru)'); 
  $data = curl_exec($ch); 
  curl_close($ch); 
?>

Посылка GET запроса ничем не отличается от получения страницы. Важно заметить, что строка запроса формируется следующим образом:

https://server.com/index.php?name1=value1&name2=value2&name3=value3

где https://server.com/index.php — адрес страницы, nameX — название переменной, valueX — значение переменной.

Пример использования POST запроса

<?php 
  $ch = curl_init(); 
  curl_setopt($ch, CURLOPT_URL, 'https://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 (https://mysite.ru)'); 
  $data = curl_exec($ch); 
  curl_close($ch); 
?>

Отправка POST запроса не многим отличается от отправки GET запроса. Все основные шаги остаются такие же. Переменные также задаются парами: name1=value1&name2=value2.

Пример HTTP-авторизации

<?php  
  // HTTP авторизация  
  $url = "https://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;  
?>

или если нужно в header передать параметры

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-type: application/xml',
    'Authorization: admin',
    'X-Api-Key: YOURAPI'
));

Пример FTP-сессии

<?PHP  
  $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 "cURL error number:".curl_errno($ch)."<br/>";   
  echo "cURL error:".curl_error($ch)."<br/>";   
  curl_close($ch); 
?>

И в завершение вкусняшка, пишем скрипт который авторизируется, отправляет данные и получает ответ.

$data = ["val"=>"aaaaaaa", "val2"=>"bbbbb"];

$result = post_to_url("https://www.site.com/stock_update.php", $data);

function post_to_url($url, $data)
{
	$fields = '';

	foreach($data as $key => $value)
	{ 
		$fields .= $key . '=' . $value . '&'; 
	}

	$fields = substr($fields,0,-1);

	$post = curl_init();
	curl_setopt($post, CURLOPT_URL, $url);
	curl_setopt($post, CURLOPT_POST, count($data));
	curl_setopt($post,CURLOPT_USERPWD,'login:password'); 
	curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
	curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);
	$result = curl_exec($post);
	curl_close($post);

	$xml = simplexml_load_string($result);

	return $xml;
}

 

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
× iOs app

To install this Web App in your iPhone/iPad press iOs sourse and then Add to Home Screen.