Всякий раз, когда мы делаем удаленные запросы с помощью WordPress, мы, вероятно, будем использовать одну из следующих функций:
И да, иногда мы будем использовать cURL в зависимости от характера проекта, но это выходит за рамки содержания этого поста.
В этой статье я хочу поговорить конкретно об удаленных запросах и указании заголовков для стороннего API.
Заголовки авторизации с WordPress
Всякий раз, когда дело доходит до асинхронных запросов к WordPress, процесс часто выглядит следующим образом:
- Настройте функцию JavaScript для выполнения вызова на стороне сервера (конечно, с защищенным одноразовым номером ),
- Попросите сервер выполнить запрос, используя одну из вышеупомянутых функций,
- Верните ответ либо в виде сообщения об успехе, либо в виде сообщения об ошибке ,
- Пусть клиентский JavaScript обрабатывает ответ любым способом, который кажется подходящим на основе ответа.
Но что, если запрос API, который вам нужно сделать с сервера, требует чего-то большего, чем базовая конечная точка с несколькими параметрами?
В частности, что, если то, что вы пишете, требует от вас предоставления какого-либо разрешения на вашу работу? К счастью, WordPress позволяет нам устанавливать заголовки, которые решают именно эту проблему.
Если вы хотите реализовать что-то подобное, то я предполагаю, что тип контента будет типом JSON, а авторизация будет представлять собой некоторый тип токена (однако ваша реализация может отличаться в зависимости от системы, с которой вы работаете). работающий).
В этом случае мой токен будет просто идентифицирован как $token. А вот простой пример:
<?php
$response = wp_safe_remote_post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => $token
],
'body' => wp_json_encode($args),
'method' => 'POST',
'data_format' => 'body',
]
);
Кое-что, что стоит отметить
Если ваш хост работает на Apache и этот тип запроса не работает, вам, вероятно, потребуется обновить htaccessфайл, чтобы он включал следующее правило: SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1.
Спасибо Джорджу за то, что подсадил меня на это.
