PHP CURL – функции и примеры использования

Feb 14, 2019 in PHP, Бэкенд

Содержание

Админу на хлеб с маслом - 50 руб.

Предлагаю немного поговорить о языке программирования PHP, а конкретно затронуть тему расширения CURL, т.е. возможность взаимодействовать с различными серверами по различным протоколам из самого скрипта PHP.

Перед тем как приступить к рассмотрению curl хочу напомнить, что язык PHP мы с Вами уже затрагивали, например, в материале про выгрузку в Excel на PHP или возможность аутентификации на PHP, а теперь давайте поговорим о возможности посылать запросы на PHP.

Что такое CURL?

CURL – это библиотека функций PHP, с помощью которой можно посылать запросы, например, HTTP, из PHP скрипта. CURL поддерживает такие протоколы как HTTP, HTTPS, FTP и другие. Посылать HTTP запросы можно методами GET, POST, PUT.

CURL может пригодиться в случаях когда необходимо вызвать удаленный скрипт и получить результат или просто сохранить HTML код вызываемой страницы, в общем каждый может найти свое применение но смысл один это то что можно послать запросы в процессе выполнения скрипта.

Подключение библиотеки CURL в PHP

Для того чтобы использовать библиотеку CURL ее соответственно нужно подключить.

Примечание! В качестве примера мы будем использовать PHP 5.4.39 на Windows 7, а в качестве Web-сервера у нас будет выступать Apache 2.2.22.

Первое что нужно сделать, это скопировать библиотеки ssleay32.dll, libeay32.dll, libssh2.dll они расположены в директории с PHP, в системный каталог Windows, а именно в C:\Windows\System32.

Затем в php.ini подключить библиотеку php_curl.dll, т.е. раскомментировать следующую строку

Библиотека не подключена


;extension=php_curl.dll

Библиотека подключена


extension=php_curl.dll

Все, перезапускаем Apache, вызываем функцию phpinfo() и в случае успешного подключения у Вас должен появиться раздел curl

Если его нет, то это означает только одно, что библиотека не загрузилась, самая распространенная причина этого небыли скопированы вышеперечисленные DLL в системный каталог Windows.

Пример CURL – запрашиваем удаленную страницу для вывода на экран

В данном примере мы просто запросим удаленную страницу по протоколу HTTP методом GET и выведем ее содержимое на экран.

У нас имеется каталог test в нем 2 PHP файла это test_curl.php и test.php, где test_curl.php и есть скрипт где мы будем использовать curl, а test.php удаленный скрипт который мы будем вызывать. Код я подробно прокомментировал.

Код test_curl.php


//Инициализирует сеанс
$connection = curl_init();
//Устанавливаем адрес для подключения, по умолчанию методом GET
curl_setopt($connection, CURLOPT_URL, "http://localhost/test/test.php?id=1");
//Выполняем запрос
curl_exec($connection);
//Завершает сеанс
curl_close($connection);

Код test.php


//Принимаем методом GET
if (isset($_GET['id'])){
$id = (int)$_GET['id'];
//Выводим строку на основе id
switch($id){
        case 1:
            echo "<Н1>Заголовок 1";
            break;
        case 2:
            echo "<Н2>Заголовок 2";
            break;
        case 3:
            echo "<Н3>Заголовок 3";
            break;                  
}       
}

В итоге если вы запустите test_curl.php у Вас выведется на экран надпись «Заголовок 1», можете поэкспериментировать с передачей параметров id (в данном случае 2 или 3).

Пример CURL – вызываем удаленный скрипт и получаем результат

Сейчас давайте попробуем вызвать скрипт и получить результат, для того чтобы потом его обработать, для примера давайте использовать метод POST. Названия файлов оставим такими же.

Код test_curl.php


//Инициализирует сеанс
$connection = curl_init();
//Устанавливаем адрес для подключения
curl_setopt($connection, CURLOPT_URL, "http://localhost/test/test.php");
//Указываем, что мы будем вызывать методом POST
curl_setopt($connection, CURLOPT_POST, 1);
//Передаем параметры методом POST
curl_setopt($connection, CURLOPT_POSTFIELDS, "id=1");
//Говорим, что нам необходим результат
curl_setopt($connection, CURLOPT_RETURNTRANSFER, 1);
//Выполняем запрос с сохранением результата в переменную
$rezult=curl_exec($connection);
//Завершает сеанс
curl_close($connection);
//Выводим на экран
echo $rezult * 100;

Код test.php


//Принимаем методом POST
if (isset($_POST['id'])){
$id = (int)$_POST['id'];
//Получаем значение на основе id
switch($id){
        case 1:
            $itog = 1.11;
            break;
        case 2:
            $itog = 2.22;
            break;
        case 3:
            $itog = 3.33;
            break;                  
}
echo $itog;
}

И если мы запустим test_curl.php то на экран у нас выведется 111, т.е. 1.11 полученное в результате обращения к удаленному скрипту, умноженное на 100.

А теперь давайте поговорим о функциях и константах к ним.

Часто используемые функции CURL и константы

  • curl_init — Инициализирует сеанс;
  • curl_close — Завершает сеанс;
  • curl_exec — Выполняет запрос;
  • curl_errno — Возвращает код ошибки;
  • curl_setopt — Устанавливает параметр для сеанса, например:
    • CURLOPT_HEADER – значение 1 означает, что необходимо вернуть заголовки;
    • CURLOPT_INFILESIZE - параметр для указания ожидаемого размера файла;
    • CURLOPT_VERBOSE - значение 1 означает что CURL будет выводить подробные сообщения о всех производимых операциях;
    • CURLOPT_NOPROGRESS – отключение индикатора прогресса операции, значение 1;
    • CURLOPT_NOBODY – если Вам не нужен документ, а нужны только заголовки, то поставьте значение 1;
    • CURLOPT_UPLOAD - для закачки файла на сервер;
    • CURLOPT_POST – выполнить запрос методом POST;
    • CURLOPT_FTPLISTONLY - получение списка файлов в директории FTP сервера, значение 1;
    • CURLOPT_PUT - выполнить запрос методом PUT, значение 1;
    • CURLOPT_RETURNTRANSFER - возвратить результат, не выводя в браузер, значение 1;
    • CURLOPT_TIMEOUT – максимальное время выполнения в секундах;
    • CURLOPT_URL – указание адреса для обращения;
    • CURLOPT_USERPWD - строка с именем пользователя и паролем в виде [username]:[password];
    • CURLOPT_POSTFIELDS – данные для POST запроса;
    • CURLOPT_REFERER - задает значение HTTP заголовка «Referer: »;
    • CURLOPT_USERAGENT - задает значение HTTP заголовка «User-Agent: »;
    • CURLOPT_COOKIE - содержимое заголовка «Cookie: », который будет отправлен с HTTP запросом;
    • CURLOPT_SSLCERT- имя файла с сертификатом в формате PEM;
    • CURLOPT_SSL_VERIFYPEER – значение 0, для того чтобы запретить проверку сертификата удаленного сервера (по умолчанию 1);
    • CURLOPT_SSLCERTPASSWD - пароль к файлу сертификата.
  • curl_getinfo — Возвращает информацию об операции, вторым параметром может выступать константа для указания, что именно нужно показать, например:
    • CURLINFO_EFFECTIVE_URL - последний использованный URL;
    • CURLINFO_HTTP_CODE - последний полученный код HTTP;
    • CURLINFO_FILETIME - дата модификации загруженного документа;
    • CURLINFO_TOTAL_TIME - время выполнения операции в секундах;
    • CURLINFO_NAMELOOKUP_TIME - время разрешения имени сервера в секундах;
    • CURLINFO_CONNECT_TIME - время, затраченное на установку соединения, в секундах;
    • CURLINFO_PRETRANSFER_TIME - время, прошедшее от начала операции до готовности к фактической передаче данных, в секундах;
    • CURLINFO_STARTTRANSFER_TIME - время, прошедшее от начала операции до момента передачи первого байта данных, в секундах;
    • CURLINFO_REDIRECT_TIME - время, затраченное на перенаправление, в секундах;
    • CURLINFO_SIZE_UPLOAD - количество байт при закачке;
    • CURLINFO_SIZE_DOWNLOAD - количество байт при загрузке;
    • CURLINFO_SPEED_DOWNLOAD - средняя скорость закачки;
    • CURLINFO_SPEED_UPLOAD - средняя скорость загрузки;
    • CURLINFO_HEADER_SIZE - суммарный размер всех полученных заголовков;
    • CURLINFO_REQUEST_SIZE - суммарный размер всех отправленных запросов;
    • CURLINFO_SSL_VERIFYRESULT - результат проверки SSL сертификата, запрошенной с помощью установки параметра CURLOPT_SSL_VERIFYPEER;
    • CURLINFO_CONTENT_LENGTH_DOWNLOAD - размер загруженного документа, прочитанный из заголовка Content-Length;
    • CURLINFO_CONTENT_LENGTH_UPLOAD - размер закачиваемых данных;
    • CURLINFO_CONTENT_TYPE - содержимое полученного заголовка Content-type, или NULL в случае, когда этот заголовок не был получен.

Подробнее о функциях CURL и константах к ним можете посмотреть на официальном сайте PHP -php.net