fbpx
Личный кабинет
Россия, Саратов +7(906)304-97-83 info@web-tolk.ru

Создание внешних запросов с использованием HttpFactory (Joomla)

Саратовский железнодорожный мост, логотип джумла и текст HttpFactory

Написал перевод-компиляцию 3-х статей на хабре, которая будет полезна разработчикам при интеграции Joomla со сторонними сервисами по API. Дублирую текст себе.

Обычно когда мы хотим сделать внешний запрос мы используем для этих целей cURL. Настройка cURL довольно громоздкая, да и в принципе проблематично держать в голове все необходимые настройки. Также есть сервера без поддержки cURL, а значит Ваш код не будет работать. В этих случаях нужен запасной вариант.

С использованием Joomla довольно легко настроить cURL и все необходимые резервные варианты подключений в одной строчке кода.

use Joomla\CMS\Http\HttpFactory;
$http = HttpFactory::getHttp(null, ['curl', 'stream']);

Этот код вызывает драйвер Joomla Http, позволяющий делать исходящие запросы на внешние URL. Этот драйвер использует драйверы транспорта в указанном порядке, то есть в данном случае в начале cURL (если доступен), а затем stream.

В Joomla 3 "из коробки" доступны 3 драйвера транспорта:

  • cURL
  • socket
  • stream

Создание вызова

HttpFactory в Joomla 3 поддерживает следующие типы HTTP-запросов:

  • delete
  • get
  • head
  • options
  • patch
  • post
  • put
  • trace

Все эти методы используют одинаковые аргументы:

  1. URL - url вызова, end-point.
  2. Data - массив данных, отправляемых в запросе.
  3. Headers - заголовки http-запроса. Могут использоваться, например, для авторизации.
  4. Timeout - установка специфичного таймаута для запроса.

Пример POST-запроса

$answer = $http->post($url);

POST-запрос с данными 

$answer = $http->post($url, ['foo' => 'bar']);

Добавление опций запроса

HttpFactory может добавлять опции настроек для драйвера транспорта. Для этого нужно создать массив, где ключ - это опция, а значение - значение опции соответственно. Ниже примеры опций для cURL. Полный список в документации PHP.

$curlOptions = array();
$curlOptions[CURLOPT_SSL_VERIFYHOST] = false;

Далее добавляем массив с опциями с помощью метода setOption().

$http->setOption('transport.curl', $curlOptions);

Токены аутентификации в заголовках Http-запроса Joomla

Joomla может взаимодействовать с внешним миром получая или отправляя данные. Многие сервисы требуют наличие заголовков запроса с токенами аутентификации. Подробнее в Обзоре способов и протоколов аутентификации в веб-приложениях.

Добавить нужные заголовки весьма просто. Создаем массив с нужными заголовками, а затем указываем его при создании Http-запроса.

 

if(!empty($access_token) && !empty($user_key)){
            $headers = array(
                'Authorization' => 'AccessToken '.$access_token,
                'Content-Type'  => 'application/json',
                'charset'       => 'UTF-8',
                'X-User-Authorization'=> 'Basic '.$user_key
            );

        if(!is_null($data)){
            $headers['Content-Length'] = strlen($data);
        }
		$http->post($url,$data,$headers);
}

Далее уже оборачиваем запрос в try-catch и обрабатываем ошибки.

Обработка ответа

Ответом всегда является объект класса HttpResponse. Он имеет 3 свойства:

  • code - код ответа сервера (200, 400, 301 и т.д.)
  • headers - заголовки ответа сервера
  • body - собственно тело ответа сервера

Заключение

В процессе работы над интеграцией Joomla с внешними сервисами родилась идея этой статьи, которую предполагал писать сам. Однако, нашлись вполне адекватные зарубежные источники и данная статья является переводом и компиляцией трёх небольших статей о Joomla 3 HttpFactory с изменениями и доработками.

От читателей приветствую пожелания и уточнения по терминологии.

Список источников:

Сергей Толкачев

Full stack разработчик (разработчик полного цикла): HTML5, CSS3, jQuery, PHP, СЕО. Специализируюсь на CMS Joomla. C 2010 года делаю сайты для клиентов.

Подпишитесь на новости

0
0.00 ₽