Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 1, 2017 06:15:22

roggerg
Зарегистрирован: 2015-03-12
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

Мне надо реализовать автризацию на mail.ru для парсинга почты.
Но для начала решил попробовать на сайте python.su

 import requests
url = 'http://python.su/account/signin/'
email = 'email'
password = 'password'
user_data = {'email': email, 'password': password}
response = requests.post(url, data=user_data)
Приходит 403 ответ. Почему не проходит авторизация?
Использую питон 3.5

Отредактировано roggerg (Окт. 1, 2017 06:16:20)

Офлайн

#2 Окт. 1, 2017 08:32:56

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Авторизация на сайте

Нужно запомнить csrftoken, который передается в cookie и передать его в post запросе при авторизации.

Попробуйте следующее:

 mysession = requests.session()
mysession.get(url)
user_data.update({'csrfmiddlewaretoken': mysession.cookies['csrftoken']})
response = mysession.post(url, data=user_data)

И, конечно, парсить почту через web-интерфейс mail.ru будет очень не просто; Поэтому, скорее всего вы бы хотели использовать общение с почтовым сервером по протоколу IMAP (есть для этого Python библиотека)…

Отредактировано scidam (Окт. 1, 2017 08:39:12)

Офлайн

#3 Окт. 1, 2017 20:37:27

roggerg
Зарегистрирован: 2015-03-12
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

scidam
Нужно запомнить csrftoken, который передается в cookie и передать его в post запросе при авторизации.Попробуйте следующее:
Спасибо, с вашими рекомендациями авторизация прошла. Не могли бы вы объяснить что делает эта строчка, я понимаю что идет запрос на получение страницы но почему она не присвоена какой-нибудь переменной.
mysession.get(url)

Этот способ авторизации будет работать для всех сайтов с http?

Так а для общения с сервером про протоколу IMAP мне ведь нужно подобную авторизацию сделать? Или для этого использовать возможности библиотеки IMAP

Отредактировано roggerg (Окт. 1, 2017 21:50:44)

Офлайн

#4 Окт. 2, 2017 03:38:07

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Авторизация на сайте

Строчка “mysession.get(url)” нужна, чтобы получить текущее значение csrf токена. csrf токен сохраняется в mysession.cookies, и его нам нужно отдать при отсылке формы, иначе запрос не пройдет (сайт-то работает на django и использует стандартную защиту от csrf-атак).

> Этот способ авторизации будет работать для всех сайтов с http?

Конечно нет. Сервер может иметь хитрые способы проверить кто пытается авторизоваться/зарегистрироваться робот или человек. Начиная от простой проверки заголовков запроса и/или использования javascript скриптов на странице, чтобы оценить по поведению на странице не робот ли выполняет запросы.







Офлайн

#5 Окт. 2, 2017 06:52:33

roggerg
Зарегистрирован: 2015-03-12
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Авторизация на сайте

scidam
Строчка “mysession.get(url)” нужна, чтобы получить текущее значение csrf токена. csrf токен сохраняется в mysession.cookies, и его нам нужно отдать при отсылке формы, иначе запрос не пройдет (сайт-то работает на django и использует стандартную защиту от csrf-атак).> Этот способ авторизации будет работать для всех сайтов с http?Конечно нет. Сервер может иметь хитрые способы проверить кто пытается авторизоваться/зарегистрироваться робот или человек. Начиная от простой проверки заголовков запроса и/или использования javascript скриптов на странице, чтобы оценить по поведению на странице не робот ли выполняет запросы.

Спасибо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version