Парсинг данных с modRest

Всем салют!
Хочу отправлять некоторые запросы по api через curl клиент modx. Начал с простого — пробую тащить курс валют. Но что-то не получается. Без curl modx все работает.

В общем есть код:
$url = 'http://www.cbr.ru/scripts/XML_daily.asp';
$params = [
  'date_req' => date("d/m/Y")
];
$client = $modx->getService('rest', 'rest.modRest');
$client->setOption('format', 'XML');
$response = $client->get($url, $params, $headers);
$data = $response->process();

// Проверяем код ответа
if (property_exists($response->responseInfo, 'scalar')) {
  $code = $response->responseInfo->scalar;
};
echo '
'.$code;

// Выводим ответ
echo '
--<pre>';
print_r($data);
echo '</pre>--';


В ответ получаю пустой массив ($data):
Хотя ответ ($code) возвращается 200…
Если просто взял ссылку с запроса, то она открывается успешно.

Вроде все делаю по по документации

Прошу помощи, что делаю не так.
Благодарен за подсказки.
Спасибо!
Rasul
24 августа 2022, 01:31
modx.pro
830
0

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

Гарри
24 августа 2022, 23:25
+1
Не пишите 'xml' большими буквами:
$client->setOption('format', 'xml');
 
Кстати, modRest устарел. Лучше используйте Guzzle.
    Rasul
    25 августа 2022, 17:32
    0
    Здравствуйте!
    Ваша подсказка:
    Не пишите 'xml' большими буквами:
    сработала)
    В документации кстати указано в примере «JSON», но видимо ошибка…
    Благодарю!
    А еще думаю стоит посмотреть в сторону Guzzle)
    Еще раз спасибо!
    vectorserver
    25 августа 2022, 09:59
    +1
    Быстрее на CURL, я так думаю конечно)
    <?php
    
    /**
     * @param $url
     * @return array
     */
    
    function curlGet($url)
    {
    
        $ch = curl_init();
    
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    
        curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    
        $headers = array();
        $headers[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9';
        $headers[] = 'Accept-Language: ru,en;q=0.9,ru-RU;q=0.8,en-US;q=0.7';
        $headers[] = 'Cache-Control: no-cache';
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    
        $result = array('st' => 'OK', 'data' => curl_exec($ch));
        if (curl_errno($ch)) {
            $result['st'] = 'Error';
            $result['ErrorMsg'] = curl_error($ch);
        }
        curl_close($ch);
        return $result;
    }
    
    $xmlData = curlGet('http://www.cbr.ru/scripts/XML_daily.asp?date_req=25.08.2022');
    var_dump($xmlData);
      Rasul
      25 августа 2022, 17:38
      0
      Здравствуйте!
      Спасибо за решение! На curl сам когда-то писал давно)

      Хотел перенести на «curl от modx» и решил попробовать на простом парсере валюты. Хотя теперь думаю стоит и с Guzzle поковыряться)
      Благодарю за ответ!
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4