Описание функции wp_safe_remote_request()
Функция wp_safe_remote_request() выполняет безопасный HTTP-запрос (GET, POST и др.) к удаленному серверу. Она используется для получения данных с внешних источников, обеспечивая защиту от возможных уязвимостей, таких как атаки типа CSRF или XSS. Функция проверяет URL на соответствие определенным критериям безопасности, прежде чем выполнять запрос
Параметры
$url
Тип: string
Обязательный: Да
Описание: URL-адрес, к которому будет выполнен запрос
Возможные значения:
$args
Тип: array
Обязательный: Нет
По умолчанию: array()
Описание: Массив дополнительных параметров для запроса
Возможные значения:
method: GET, POST, PUT, DELETE
body: Данные для отправки при POST/PUT запросах
timeout: Время ожидания в секундах
headers: Массив заголовков для запроса
Возвращаемое значение
Тип: array|WP_Error
Описание: Массив с результатами запроса или объект WP_Error в случае ошибки
Возможные значения:
• Массив с данными ответа и статусом
• Объект WP_Error в случае неудачи
Примеры использования
Простой запрос к API с обработкой ошибок
$response = wp_safe_remote_request('https://example.com/api/data');
if (is_wp_error($response)) {
echo 'Ошибка: ' . $response->get_error_message();
} else {
echo 'Ответ: ' . wp_remote_retrieve_body($response);
}
Выводит либо ошибку, либо тело ответа
Отправка POST-запроса с данными
$args = array(
'method' => 'POST',
'body' => array('key' => 'value'),
'timeout' => 15
);
$response = wp_safe_remote_request('https://example.com/api/data', $args);
Увеличивает время ожидания до 15 секунд
Логирование ошибок запроса
$response = wp_safe_remote_request('https://example.com/api/data');
if (is_wp_error($response)) {
error_log($response->get_error_message());
} else {
// Обработка успешного ответа
}
Ошибки записываются в лог
Функция для получения данных в плагине
function my_plugin_fetch_data() {
$response = wp_safe_remote_request('https://example.com/api/data');
if (is_wp_error($response)) {
return 'Ошибка при получении данных';
}
return wp_remote_retrieve_body($response);
}
Возвращает данные или сообщение об ошибке
Безопасность
Валидация входных данных: URL проходит через sanitize_url() для валидации
Санитизация: Аргументы автоматически очищаются WordPress
Рекомендации: Не используйте пользовательские URL без проверки на безопасность
— Связанные функции
Выполняет GET-запрос без дополнительных проверок безопасности
Выполняет POST-запрос без дополнительных проверок безопасности
— Хуки
Фильтрует аргументы перед выполнением запроса
Фильтрует ответ после выполнения запроса
— Примечания
– Ограничения
Может не поддерживать некоторые типы запросов (например, WebSocket)
– Частые проблемы
- Проблемы с CORS при запросах к сторонним API
- Ошибка при недоступности удаленного сервера