Rest API не работает с iframe в данных формы

Вопрос или проблема

Я создал одно API с POST-запросом.

register_rest_route('myapi/v1', '/post_flyer', array(
        'methods' => 'POST',
        'callback' => 'api_post_flyer',
    ));

Мне нужно отправить данные формы с помощью <iframe></iframe> или <script></script> тега в содержимом поста.

Когда я пытаюсь проверить это API, используя Postman, каждый раз он показывает ошибку вроде “Маршрут не найден”,

"code": "rest_no_route",
"message": "Не найден маршрут, соответствующий URL и методу запроса",
"data": {
    "status": 404
}

Хотя вся функциональность присутствует,
Я хочу знать, как включить API для приема iframe и HTML-тегов в содержимом поста?

введите описание изображения здесь

Пожалуйста, уберите “https://wordpress.stackexchange.com/” из маршрута и попробуйте использовать действие добавления, как

add_action( 'rest_api_init', function () {    
register_rest_route('myapi/v1', 'post_flyer', array(
            'methods' => 'POST',
            'callback' => 'api_post_flyer',
        ));
});

Ответ или решение

Решение проблемы с REST API в WordPress, не принимающим данные из HTML-тегов, включая iframe

Ваша проблема заключается в том, что созданный вами REST API не принимает данные, отправленные с помощью встроенных тегов <iframe> и <script>, и показывает ошибку "No route found". Давайте разберем, как правильно настроить REST API в WordPress и как разрешить использование HTML-тегов в передаваемых данных.

1. Правильная регистрация вашего REST API

Существует несколько важных нюансов, которые необходимо учитывать при регистрации REST API в WordPress. Ваша регистрация маршрута должна учитывать корректный путь и правильные параметры. Убедитесь, что ваш код выглядит приблизительно так:

add_action('rest_api_init', function () {    
    register_rest_route('myapi/v1', '/post_flyer', array(
        'methods' => 'POST',
        'callback' => 'api_post_flyer',
        'permission_callback' => '__return_true', // учитывайте безопасность здесь
    ));
});

Обратите внимание на правильное использование символов / для указания пути, а также на добавление permission_callback, который устанавливает, кто может использовать этот маршрут.

2. Ошибка "No route found"

Если вы продолжаете получать ошибку “rest_no_route”, проверьте следующее:

  • Убедитесь, что ваш сервер принимает POST-запросы.
  • Проверьте, активирована ли ваша функция, которая добавляет маршрут, и правильно ли она инициализируется (например, в файле functions.php вашей темы или плагина).
  • Используйте правильный URL-адрес для вашего запроса. Например, если ваш сайт находит на https://example.com, ваш endpoint должен выглядеть так: https://example.com/wp-json/myapi/v1/post_flyer.

3. Отправка данных с использованием HTML и iframe

Так как вы хотите отправлять данные, включая HTML-код и iframe, важно безопасно обрабатывать эти данные. WordPress по умолчанию может ограничивать такие элементы, чтобы предотвратить XSS-атаки. Однако, если вы уверены в источнике этих данных, выполните следующие шаги:

  • Параметры ваши данных должны быть корректно экранированы перед использованием. Используйте функции wp_kses_post() или wp_strip_all_tags() в вашем коллбэке, если нужно сохранить HTML. Например:
function api_post_flyer(WP_REST_Request $request) {
    $content = $request->get_param('content');
    $sanitized_content = wp_kses_post($content); // Очищаем контент от нежелательных тегов

    if (empty($sanitized_content)) {
       return new WP_Error('empty_content', 'Content cannot be empty', array('status' => 400));
    }

    // Сохраните ваш контент или выполните другие действия
    return new WP_REST_Response('Success', 200);
}

4. Отладка и тестирование

Вместе с использованием Postman, попробуйте осуществить тестирование вашего API с помощью cURL или других инструментов отладки (например, встроенных в браузер Developer Tools). Убедитесь, что вы:

  • Используете правильный метод (POST).
  • Передаете нужные заголовки, такие как Content-Type: application/json.
  • Указываете правильные параметры в вашем запросе.

Пример запроса в Postman:

URL: https://example.com/wp-json/myapi/v1/post_flyer

Headers:

Content-Type: application/json

Body (выберите "raw" формат, затем "JSON"):

{
    "content": "<iframe src='example.com'></iframe>"
}

Следуя этим рекомендациям, вы сможете успешно интегрировать свой REST API с HTML-контентом. Убедитесь, что безопасность вашего сайта остается на высоком уровне, и обрабатывайте пользовательский ввод с особой тщательностью.

Оцените материал
Добавить комментарий

Капча загружается...