Очень часто при написании сообственных модулей нам нужно отправлять 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, если есть какие-нибудь вопросы, пишите в комментариях.