Добро пожаловать!
Здесь вы можете найти ответ на интересующий вас вопрос в отрасли сайтостроения, познакомится ближе с web технологиями и web стандартами.

Заметки

Использование 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($chCURLOPT_URL'http://server.com/');
    
// При значении true CURL включает в вывод заголовки
    
@curl_setopt($chCURLOPT_HEADERfalse);
    
// Куда помещать результат выполнения запроса:
    //  false - в стандартный поток вывода,
    //  true - в виде возвращаемого значения функции curl_exec.
    
@curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    
// Максимальное время ожидания в секундах
    
@curl_setopt($chCURLOPT_CONNECTTIMEOUT30);
    
// Установим значение поля User-agent
    
@curl_setopt($chCURLOPT_USERAGENT'PHP Bot (http://blog.yousoft.ru)');
    
// Выполнение запроса
    
$data = @curl_exec($ch);
    
// Вывести полученные данные
    
echo $data;
    
// Особождение ресурса
    
@curl_close($ch);
  }
?>

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

<?php
  $ch 
curl_init();
  
// GET запрос указывается в строке URL
  
curl_setopt($chCURLOPT_URL'http://server.com/?s=CURL');
  
curl_setopt($chCURLOPT_HEADERfalse);
  
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  
curl_setopt($chCURLOPT_CONNECTTIMEOUT30);
  
curl_setopt($chCURLOPT_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 запроса

<?php
  $ch 
curl_init();
  
curl_setopt($chCURLOPT_URL'http://server.com/index.php');
  
curl_setopt($chCURLOPT_HEADERfalse);
  
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  
// Нужно явно указать, что будет POST запрос
  
curl_setopt($chCURLOPT_POSTtrue);
  
// Здесь передаются значения переменных
  
curl_setopt($chCURLOPT_POSTFIELDS's=CURL');
  
curl_setopt($chCURLOPT_CONNECTTIMEOUT30);
  
curl_setopt($chCURLOPT_USERAGENT'PHP Bot (http://mysite.ru)');
  
$data curl_exec($ch);
  
curl_close($ch);
?>

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

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

<?php 
  
// HTTP авторизация 
  
$url "http://server.com/protected/"
  
$ch curl_init();     
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);  
  
curl_setopt($chCURLOPT_URL$url);  
  
curl_setopt($chCURLOPT_USERPWD"myusername:mypassword");  
  
$result curl_exec($ch);  
  
curl_close($ch);  
  echo 
$result
?>

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

<?PHP 
  $fp 
fopen(__FILE__"r"); 
  
$url "ftp://username:password@mydomain.com:21/path/to/newfile.php"
  
$ch curl_init();     
  
curl_setopt($chCURLOPT_URL$url);  
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);  
  
curl_setopt($chCURLOPT_UPLOAD1);  
  
curl_setopt($chCURLOPT_INFILE$fp);  
  
curl_setopt($chCURLOPT_FTPASCII1);  
  
curl_setopt($chCURLOPT_INFILESIZEfilesize(__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);
?>