Как обойти ошибку wordpress Статус-код: 447, делаю вход через парсер на python?

Рейтинг: -1Ответов: 3Опубликовано: 10.05.2023

Пишу парсер на python, который будет создавать автоматически новую запись и в неё закидывать нужные картинки по ключевым словам из библиотеки файлов этого же сайта. Проблема: почему-то не удается войти в админку через парсер; данные входа все верные. Решил узнать в чем проблема, вывело в консоль Статус-код: 447. Не знаю, как её обойти или как вообще можно войти в свою учетку через парсер.

Вот пример кода, который должен входить в учетку и создать там новую запись:

import requests


# Войти в учетную запись WordPress
def login(username, password):
    session = requests.Session()

    login_url = 'https://название сайта/wp-login.php'
    data = {
        'log': username,
        'pwd': password,
        'wp-submit': 'Log In',
        'redirect_to': 'https://название сайта/wp-admin/',
        'testcookie': '1'
    }

    response = session.post(login_url, data=data)

    # Проверяем успешность входа в учетную запись
    if response.status_code == 200 and 'wp-admin' in response.url:
        print('Успешный вход в учетную запись')
        return session
    else:
        print('Не удалось войти в учетную запись')
        print('Статус-код:', response.status_code)
        print('URL-адрес:', response.url)
        print('Ответ сервера:', response.text)
        return None


# Создать новую запись
def create_post(session, title, content):
    post_url = 'https://название сайта/wp-admin/post-new.php'
    data = {
        'post_title': title,
        'content': content,
        'publish': 'Publish'
    }

    response = session.post(post_url, data=data)

    # Проверяем успешное создание записи
    if response.status_code == 200 and 'post.php' in response.url:
        print('Запись успешно создана')
    else:
        print('Не удалось создать запись')
        print('Статус-код:', response.status_code)
        print('URL-адрес:', response.url)
        print('Ответ сервера:', response.text)


# Пример использования парсера
session = login('логин здесь', 'пароль здесь')
if session is not None:
    create_post(session, 'Новый пост', 'Содержимое нового поста')

Вот что пишет в консоли:

Не удалось войти в учетную запись
Статус-код: 447
URL-адрес: https://название сайта/wp-login.php
Ответ сервера: 

Process finished with exit code 0

Ответы

▲ 0

Это нестандартный код ответа. Стандартные коды можно посмотреть здесь.

Ядро WordPress не содержит в себе такого кода ответа. Так что вопрос не имеет отношения к WP.

Вам надо обратиться за разъяснениями к администратору сервера или поддержке хостинга.

▲ 0

Попробовал через Postman зайти на свой сайт, в нём можно на скорую руку посмотреть что не даёт зайти на сайт.

Так вот, если убрать все headers, то WP выводит ошибку:

Ошибка: Cookies либо заблокированы, либо не поддерживаются вашим браузером. Чтобы использовать WordPress, нужно разрешить cookies.

Если в headers добавить , то авторизация проходит без проблем.
Причём какой-то специальный вроде _ga добавлять необязательно, достаточно добавить такой:
wordpress_test_cookie=WP%20Cookie%20check

▲ 0

Я думаю что у вас не получается потому что вы не прописали headers. он вас принимает за робота. пропишите:

headers={ "User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8" }

и добавляйте стандартно в headers=headers в параметрах при отправке запроса.