Drupal_http_request для POST, GET, PUT и других запросов в Drupal 7

Очень часто при написании сообственных модулей нам нужно отправлять http запросы на другие сервера для получения нужных данных. Примеров может быть масса от перевода текста и до расчета стоимости каких либо услуг. В drupal для этих целей служит функция drupal_http_request:


drupal_http_request($url, array $options = array());
Служит для обработки GET, PUT, POST и других http запросов.
Параметры:

$url:строка содержащая полный URI.
array $options: массив, который может содержать заголовки, метод, данные, максимальное количество перенаправлений, таймаут.

Возвращаемое значение
объект, который содержит тело запроса, код ответа, протокол, статук, код редиректа, ссылку редиректа, сообщения об ошибках, заголовки и конечно же ответ. Более подробно можно ознакомится на по этой ссылке

Ну что давайте теперь попробуем все на практике. Для этого я выбрал сервес перевода от Яндекса. Вот тут API Яндекса по переводу. Начнем с GET запроса. Работать я буду с JSON-интерфейсом. Согласно API Яндекса наша строка должна выглядеть следующим образом:

http://translate.yandex.net/api/v1/tr.json/translate?lang=en-ru&text=To+be,+or+not+to+be%3F&text=That+is+the+question
тут мы передаем направление перевода и строки для перевода. Самый простой метод отправить такой запрос приведен ниже:

//создаем строку с запросом
$url = 'http://translate.yandex.net/api/v1/tr.json/translate?lang=en-ru&text=To+be,+or+not+to+be%3F&text=That+is+the+question';
//отправляем запрос
$result = drupal_http_request($url);
//получаем ответ в виде объекта
$translate = json_decode($result->data);
здесь я опустил некоторые проверки, например код ответа и существавоние $result->data, т. к. в рамках данной статьи мы разбираем сами запросы)) итак ответ будет предоставлен в следующем виде:

stdClass Object
(
    [code] => 200
    [lang] => en-ru
    [text] => Array
        (
            [0] => Быть или не быть?
            [1] => Вот в чем вопрос
        )

)

Сейчас проделаем тоже самое только POST запросом, вот код, в нем я для наглядности взял заголовок и содержимое материала:


//загружаем объект материала
$new_node = node_load(12);
//создаем массив с данными, указываем направление перевода, текст перевода, заменяем пробелы на "+" и формат текста html
  $data = 'lang=ru-en';
  $data .= '&text='.str_replace(' ', '+', $new_node->title);
  $data .= '&text='.str_replace(' ', '+', $new_node->body['und'][0]['value']);
  $data .= '&format=html';
//массив опций для запроса, указываем метод, данные, таймаут и заголовок
  $options = array(
    'method' => 'POST',
    'data' => $data,
    'timeout' => 15,
    'headers' => array('Content-Type' => 'application/x-www-form-urlencoded'),
  );
//ну а здесь отправляем запрос и декодируем его в объект
  $result = drupal_http_request('http://translate.yandex.net/api/v1/tr.json/translate', $options);
  $translate = json_decode($result->data);

Ну вот я и расказал вам основы работы с http запросами в Drupal, если есть какие-нибудь вопросы, пишите в комментариях.

Теги: Drupal 7
Новости