Вопрос или проблема
У меня есть сайт на WordPress, размещенный на Bluehost, обычный интернет-магазин с использованием WooCommerce и Elementor. Я могу добавлять и редактировать товары через API WooCommerce без проблем, но всякий раз, когда я пытаюсь сделать запрос к REST API WordPress, я получаю ошибку:
‘{“code”:”rest_cannot_create”,”message”:”Извините, вам не разрешено создавать записи от имени этого пользователя.”,”data”:{“status”:401}}’
Мой код на Python:
import base64
import requests
def post_post(title, content):
url="https://mysite.com/wp-json/wp/v2/posts"
username="user"
password = 'applicationpassword'
credentials = username + ':' + password
token = base64.b64encode(credentials.encode())
authorization = 'Basic' + token.decode('utf-8')
post_data = {
'title': title,
'content': content
}
header = {
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'Authorization': authorization
}
response = requests.post(url, headers=header, json=post_data)
return response
r = post_post("title", "content")
r.text
Я пробовал редактировать файл .htaccess, как описано в этой теме, но это не сработало:
проблема с аутентификацией в rest api – rest_cannot_create
Буду очень признателен за любую помощь! Я тут волосы на голове рву 😉
Вы говорите, что можете успешно публиковать товары WooCommerce, так что, я предполагаю, вы знаете, что WooCommerce и WordPress имеют разные API и разные учетные данные. Код, который вы привели выше, предназначен для API WordPress, и я хочу убедиться, что вы знаете, что нужно создать пароль приложения пользователя (в WordPress пользователи/редактировать пользователей), чтобы использовать API WordPress. Обычные учетные данные, которые вы используете для входа на сайт, не подойдут.
Ответ или решение
Ошибка "rest_cannot_create": Причины и Решения
Если вы столкнулись с ошибкой {"code":"rest_cannot_create","message":"Sorry, you are not allowed to create posts as this user.","data":{"status":401}}
при попытке создать пост через REST API WordPress, не отчаивайтесь. Давайте вместе рассмотрим возможные причины проблемы и пути ее решения.
1. Проверка Учетных Данных
Для работы с REST API WordPress необходимо использовать правильные учетные данные. Обратите внимание на следующие моменты:
-
Приложенные пароли: Убедитесь, что вы создали приложение-пароль для пользователя, который вы используете в коде. Для этого вам нужно зайти в раздел "Пользователи" в админ-панели WordPress, выбрать нужного пользователя и сгенерировать приложение-пароль. Используйте именно его, а не обычный пароль.
-
Роли пользователя: Убедитесь, что пользователь, от имени которого вы пытаетесь создать пост, обладает нужными правами. Для создания постов пользователь должен иметь роль "Редактор" или "Администратор". Проверьте настройки ролей в вашей системе WordPress.
2. Правильный Формат Заголовков
В вашем коде есть ошибка в формировании заголовка авторизации. Следует добавить пробел между словом "Basic" и значением токена. Исправьте строку:
authorization = 'Basic ' + token.decode('utf-8')
3. Настройки .htaccess
Если вы изменяли файл .htaccess, убедитесь, что в нем нет конфликтов, которые могут блокировать доступ к REST API. В некоторых случаях записи, которые увеличивают безопасность, могут препятствовать успешному выполнению запросов к API.
Пример стандартного файла .htaccess для WordPress:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
4. Корректное Использование Python-запросов
Ваш код для отправки данных выглядит в целом корректно, однако стоит оценить статус ответа:
response = requests.post(url, headers=header, json=post_data)
if response.status_code != 201: # 201 означает успешное создание
print(f'Ошибка {response.status_code}: {response.text}')
5. Тестирование через Postman или cURL
Для устранения неполадок вы можете протестировать свои запросы через Postman или cURL. Это поможет вам понять, правильно ли вы формируете запросы. Например, команда cURL будет выглядеть так:
curl -X POST https://mysite.com/wp-json/wp/v2/posts \
-H "Authorization: Basic $(echo -n 'user:applicationpassword' | base64)" \
-d '{"title":"title","content":"content"}'
Заключение
Если после выполнения всех вышеперечисленных шагов проблема не решится, возможно, имеет смысл проверить наличие других плагинов, которые могут блокировать доступ к REST API.
Создание постов через REST API WordPress должно работать без дополнительных проблем, если все настройки выполнены корректно. Пользуйтесь предложенными советами и рекомендациями, и у вас получится решить возникшую проблему.