wp_remote_request()
– это мощная функция в WordPress, которая позволяет отправлять HTTP-запросы любого типа (GET, POST, PUT, DELETE и др.) и получать ответы от удаленных серверов. Она используется для взаимодействия с различными API и веб-сервисами. В данной статье мы разберем, как работать с этой функцией, какие параметры она принимает, и приведем несколько практических примеров использования.
$response = wp_remote_request( $url, $args );
Описание
Функция wp_remote_request()
выполняет HTTP-запрос по указанному URL с заданными аргументами и возвращает массив данных о результате или ошибку в виде объекта WP_Error
, если запрос не удался.
Параметры
- $url (string, обязательный): URL, к которому направляется запрос.
- $args (array, необязательный): Ассоциативный массив аргументов запроса.
Основные аргументы в массиве $args
:
- method (string, по умолчанию ‘GET’): HTTP-метод. Может быть ‘GET’, ‘POST’, ‘PUT’, ‘DELETE’ и т.д.
- body (string|array): Данные, которые нужно отправить вместе с запросом (обычно используется для методов POST или PUT).
- headers (string|array): Заголовки запроса.
- cookies (array): Массив с куками, которые должны быть отправлены с запросом.
- timeout (int, по умолчанию 5): Максимальное время ожидания ответа в секундах.
- blocking (bool, по умолчанию true): Если установлено в
false
, запрос будет выполнен асинхронно. - sslverify (bool, по умолчанию true): Определяет, нужно ли проверять SSL-сертификаты.
Возвращаемые значения
Функция возвращает массив с данными о запросе или объект WP_Error
, если произошла ошибка. Основные данные, которые можно получить из ответа:
- headers: Массив заголовков ответа.
- body: Тело ответа (часто содержит JSON).
- response: Массив с кодом и сообщением ответа (например, код 200 означает успешный запрос).
- cookies: Массив куков, полученных с ответа.
- filename: Имя файла, если ответ был записан в файл.
Пример 1: DELETE-запрос
Отправим DELETE-запрос на сервер.
$response = wp_remote_request( 'https://example.com/api/resource/123', array(
'method' => 'DELETE',
) );
if ( is_wp_error( $response ) ) {
$error_message = $response->get_error_message();
echo "Ошибка запроса: $error_message";
} else {
echo "Ответ сервера: " . wp_remote_retrieve_body( $response );
}
В данном примере мы отправляем запрос на удаление ресурса с ID 123. В случае успеха выводится тело ответа.
Пример 2: POST-запрос с передачей данных
Отправим POST-запрос с передачей данных в теле запроса.
$response = wp_remote_request( 'https://example.com/api/data', array(
'method' => 'POST',
'body' => array(
'name' => 'John Doe',
'email' => '[email protected]'
),
'headers' => array(
'Authorization' => 'Bearer your_token_here',
'Content-Type' => 'application/json'
)
) );
if ( ! is_wp_error( $response ) ) {
$response_code = wp_remote_retrieve_response_code( $response );
if ( $response_code === 201 ) {
echo "Данные успешно отправлены!";
} else {
echo "Произошла ошибка: код $response_code";
}
} else {
echo "Ошибка запроса: " . $response->get_error_message();
}
Этот пример демонстрирует, как отправить POST-запрос с данными пользователя и заголовком авторизации.
Пример 3: Асинхронный запрос
Иногда бывает полезно отправить запрос асинхронно, чтобы не ждать ответа.
wp_remote_request( 'https://example.com/api/notify', array(
'method' => 'POST',
'body' => json_encode( array( 'event' => 'data_updated' ) ),
'blocking' => false
) );
// Код продолжит выполнение, не дожидаясь ответа
Пример 4: Получение данных через API
Рассмотрим получение данных о пользователе через API GitHub.
$response = wp_remote_request( 'https://api.github.com/users/username' );
if ( is_wp_error( $response ) ) {
echo 'Ошибка: ' . $response->get_error_message();
} else {
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body, true );
echo 'Имя пользователя: ' . $data['login'];
}
Этот запрос получает данные пользователя с GitHub по его имени и выводит имя пользователя на экран.
Заключение
Функция wp_remote_request()
— это универсальный инструмент для работы с удаленными сервисами и API в WordPress. Она позволяет отправлять запросы с использованием различных HTTP-методов, управлять заголовками, куками, передавать данные в теле запроса и настраивать дополнительные параметры, такие как время ожидания или необходимость проверки SSL.