Ajax не признает запрос

Отправляю на вордпрессовский wp-admin/admin-ajax.php запрос из питона вот такой формы

data_json={"action":"woocommerce_load_variations","security":"3d0bd5749c","product_id":"130299","attributes[pa_format][id]":"9","attributes[pa_format][name]":"pa_format","attributes[pa_format][options][]":["307","308"],"attributes[pa_format][position]":"0","attributes[pa_format][visible]":"true","attributes[pa_format][variation]":"true","attributes[pa_format][is_visible]":"1","attributes[pa_format][is_variation]":"1","attributes[pa_format][is_taxonomy]":"1","attributes[pa_format][value]":"","attributes[pa_kit][id]":"10","attributes[pa_kit][name]":"pa_kit","attributes[pa_kit][options][]":["309","310","319","311"],"attributes[pa_kit][position]":"1","attributes[pa_kit][visible]":"true","attributes[pa_kit][variation]":"true","attributes[pa_kit][is_visible]":"1","attributes[pa_kit][is_variation]":"1","attributes[pa_kit][is_taxonomy]":"1","attributes[pa_kit][value]":"","attributes[pa_scale][id]":"13","attributes[pa_scale][name]":"pa_scale","attributes[pa_scale][options][]":["470","370","372","373"],"attributes[pa_scale][position]":"2","attributes[pa_scale][visible]":"true","attributes[pa_scale][variation]":"true","attributes[pa_scale][is_visible]":"1","attributes[pa_scale][is_variation]":"1","attributes[pa_scale][is_taxonomy]":"1","attributes[pa_scale][value]":"","page":"1","per_page":"15"}

req = requests.Request('POST', 'https://shop.kartonkino.ru/wp-admin/admin-ajax.php', data=data_json)
prep = req.prepare()
resp = session.send(prep)

возвращает 400 ошибку, я так понимаю что дело в самом HTTP запросе, хотя с браузера отправляю все ок. В чем может быть проблема, спасибо.


Ответы (1 шт):

Автор решения: KAGG Design

Функция load_variations() вызывает check_ajax_referer(), которая проверяет nonce. Да, вы отправляете nonce с именем security. Но в nonce свернуты домен, имя пользователя, куки авторизации. Это если совсем приблизительно.

Когда вы шлёт запрос из браузера, куки там есть. Из питона - нет. Проверка nonce не проходит, и WP отвечает вам с кодом 400.

А общем, почитайте про XSRF, вы пытаетесь ровно то же самое сделать. WP и серьёзные плагины давно защищены от этого.

→ Ссылка