LINUX.ORG.RU

Error 422 при попытке логина на сайт с помощью python requests

 , ,


0

1

Один из моих первых парсеров, пишу, чтобы облегчить выполнение рабочей задачи. Стандартный кусок кода для авторизации на сайте:

authdata = {
    "authenticity_token": "*********",
    "admin[email]": "user@email.com",
    "admin[password]": "password",
    "admin[remember_me]": 0,
    "commit": "Login"
}
login_url = "https://sitename.com/apanel/login?locale=en"
the_session = requests.session()
the_session.post(login_url, authdata)

Упорно возвращает 422 ошибку. Долго думал на неправильное указание ключей в authdata - нет, все точно как в браузере. При простом

the_session.get(login_url)

возвращает 200 (успех).

Пробовал передавать эти данные в различных конфигурациях: без authenticity_token, без «commit», вообще только логин и пароль - все равно 422 ошибка.

В чем может быть причина? Не понимаю, даже, куда уже смотреть в поисках решения.



Последнее исправление: Nevermind (всего исправлений: 1)

Ответ на: комментарий от Toxo2
authdata = {
    "authenticity_token": "*********",
    "admin[email]": "user@email.com",
    "admin[password]": "password",
    "admin[remember_me]": 0,
    "commit": "Login"
}
authdata = json.dumps(authdata)
login_url = "https://sitename.com/apanel/login?locale=en"
the_session = requests.session()
the_session.post(login_url, authdata)

Ровно тот же самый результат.

Nevermind
() автор топика
Ответ на: комментарий от Nevermind

Не могли бы вы, пожалуйста, пояснить?

Прочитайте описание 422 ошибки, если своими словами - сервер запрос понял, синтаксически запрос правильный, но содержимое запроса сервер обработать не смог. Может быть сервер возвращает не только код статуса, но и описание ошибки?

Смотрите внимательней, что и в каком виде уходит из браузера.

Ну, и, внимательнее почитайте про requests, обязательно ли использования в post-запросе именованных параметров data или json?

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 3)