Примеры выполнения HTTP запросов с помощью drupal_http_request()

Для выполнения HTTP запросов в Drupal API используется функция drupal_http_request(). Она позволяет выполнять GET, POST, PUT http запросы. В этом сниппете рассмотрим базовые примеры выполнения запросов с помощью этой функции. Данная функция актуальна для Drupal 6 и Drupal 7, так как в Drupal 8 запросы выполняются с помощью Guzzle.

Для начала выполним простой запрос к сервису яндекса для получения данных о погоде:


// Записываем урл для получения погоды в г.Москва
$url = 'http://export.yandex.ru/weather-ng/forecasts/27612.xml';
// Выполняем запрос и результат записываем в переменную
$result = drupal_http_request($url);

В результате выполнения запроса мы получим данные в виде примерно такого объекта:


stdClass Object
(
    [code] => 200
    [status_message] => 'OK',
    [data] => '<?xml version="1.0" encoding="UTF-8"?>...'
 
)

Как мы видим, были получены данные в виде строки с XML, содержащей запрашиваемые данные о погоде. Для приведения этих данных к php массиву для начала преобразуем строку в SimpleXml объект, который потом кодируется в json объект и из него получаем массив $weather с погодными данными, которые потом используем по своему усмотрению.


$weather = json_decode((json_encode(simplexml_load_string($result->data))), TRUE);

Далее выполним POST запрос к сервису API Facebook для получения количества лайков для указанного урла, который будем передавать в параметре при выполнении запроса.


$data = array(
  'query' => 'select like_count from link_stat where url="http://drupal.org"',
);
$params = array(
  'method' => 'POST',
  'data' => drupal_http_build_query($data),
);

$url = 'https://api.facebook.com/method/fql.query';

$result = drupal_http_request($url, $params);

В результате в $result->data будет как и в первом примере содержаться XML, содержащий количество лайков для drupal.org.

В некоторых случаях для доступа к какому-либо сервису нужна базовая аутентификация (Basic authentication). Она требует передачи серверу логина и пароля.


// В переменную $username записываем логин пользователя
$username = 'user';
// В переменную $password записываем пароль пользователя
$password = 'password';
$url = 'http://example.com/service';

$auth = str_replace('://', '://' . $username . ':' . $password . '@', $url);
// Выполняем запрос с авторизацией
$result = drupal_http_request($auth);