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
() автор топика

Это точно не url-encoded форма?

PS вообще, я бы просто с браузера вытащил этот запрос и скопировал его тело

ac130kz ★★
()
Последнее исправление: ac130kz (всего исправлений: 1)
Ответ на: комментарий от Nevermind

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

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

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

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

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

0. curl - поиграйся

1. pip3 install httpx

httpx тот же curl тока питонистей

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

Вместо того, чтобы гадать, посмотри что шлет браузер при запросе авторизации и повтори это у себя.

gruy ★★★★★
()

Скорее всего в том, что тот токен авторизации - это что-то типа csrf, который нужно предварительно спарсить со страницы с формой, он там в скрытом поле где-нибудь

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

Да, вы совершенно правы. Так и было, помогло

Nevermind
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.