Curl клиент modx

Встроенный curl клиент для отправки запросов на сторонние сервисы (RESTful и другие).
Так как все чаще используются сторонние сервисы в повседневной разработке сайтов, для этих целей в modx есть встроенный клиент, с помощью которого можно отправлять запросы:

/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$response = $client->get('GET запрос');
или
$response = $client->post('POST запрос');

// Обработка полученных данных в json или xml формате и преобразование их в массив
$array = $response->process();
В заметке перечислены способы работы с клиентом


Отправка запроса c параметрами

Записываем параметры которые хотим отправить нашему сервису

$url = 'http://site.ru/rest/products';
$params = array('limit' => 100);
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');

// $client->setOption('format','JSON'); // Формат полученных данных принимает json или xml (по умолчанию json) для 
// $client->setOption('suppressSuffix','true');   // иначе при использовании format=json в конец url добавится http://site.ru/method.json

преобразования в массив
$response = $client->get($url, $params);
$data = $response->process(); // Вернет массив

Проверка доступности метода

Чтобы проверить существование метода или хотите узнать существование какой то страницы, мы можем проверить код статуса страница в переменной responseInfo:

$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('header', true); // Возвращать заголовок
$response = $client->get($url);
if (property_exists($response->responseInfo, 'scalar')) {
    $code = $response->responseInfo->scalar;
}
echo $code; // 200 - метод доступен, 404 - метод или страница не существует

Проверка доступности сервиса

Иногда сервисы падают или слишком долго отвечают, для этого существует переменная responseError куда записывают ошибки.

$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('timeout', 15); // Устанавливаем время ожидания
$response = $client->get($url);
if ($response->responseError) {
        echo $response->responseError; // печатаем сообщение об ошибке
}

Авторизация

Для авторизации в сервисе по средствам CURLOPT_HTTPHEADER, необходимо в опциях указать username и password

$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');

$client->setOption('username', 'Логин');
$client->setOption('password', 'пароль');

$response = $client->get($url);
if (property_exists($response->responseInfo, 'scalar')) {
    $code = $response->responseInfo->scalar;
}
echo $code; // 200 - авторизованы, 403 - авторизация не пройдена

Чтение header

Чтобы сервис вернул заголовки, перед отправкой запроса нужно указать
$client->setOption('header', true);
тогда в переменной
$response->responseHeaders
мы увидем заголовки ответа от сервиса

$url = 'http://site.ru/rest/mymethod';
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('header', true);
$response = $client->get($url);
echo '<pre>'; 
print_r($response->responseHeaders); die;

Запись в header

Чтобы послать сервису наши парамеры в заголовках:

$url = 'http://site.ru/rest/mymethod';

$headers=  array(
    'Content-type' => 'application/json', // Сообщаем сервису что хотим получить ответ в json формате
    'Authorization' => 'OAuth НАШ TOKEN' // Авторизация через заголовки
);

// передаем наши заголовки сразу в класс
/* @var modRest $client */
$client = $this->modx->getService('rest', 'rest.modRest', array('headers' => $headers);

# или записываем заголовки в запрос
$response = $client->get($url, array(), $headers);

Для компонентов

Если возникает ошибка в консоле в виде:
modRestClient::__construct is deprecated since version 2.3.0. Use the modRest classes instead.
То необходимо использовать:
$client = $this->modx->getService('rest', 'rest.modRest');
так как modRestClient устаревшая функция

За подробней информации о всех возможностях класса смотрите файл:
core/model/modx/rest/modrest.class.php
Андрей Степаненко
12 августа 2019, 07:56
modx.pro
28
533
+39
Поблагодарить автора Отправить деньги

Комментарии: 11

Сергей Шлоков
12 августа 2019, 09:39
0
Молодец!
    Павел Голубев
    12 августа 2019, 10:44
    0
    Круто
      Николай Савин
      12 августа 2019, 11:12
      0
      Красотища! Спасибо.
        DeHuCkA
        15 августа 2019, 09:54
        0
        В избранное
          Евгений Борисов
          15 августа 2019, 10:47
          +1
          Реализованы функции далеко не для всех методов developer.mozilla.org/ru/docs/Web/HTTP/Methods, хотя они не так часто нужны.
            Андрей Степаненко
            15 августа 2019, 11:05
            0
            Еще пара функций в арсенале класса:
            public function put($url, $parameters=array(), $headers=array())
            public function delete($url, $parameters=array(), $headers=array()){
            не стал про них писать, так как:
            хотя они не так часто нужны.
          Иван Бочкарев
          15 августа 2019, 15:26
          +1
          Перенес в офф документацию docs.modx.org/current/ru/extending-modx/services/modrest
          Спасибо!
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11