@ecid1

Как перелогиниться на сайте с помощью Python requests?

Нужно перелогиниться на сайте, но проблема в том, что для авторизации нужно знать параметр ModdleSession в куки (причем для POST и GET запроса он разный).
Для первой авторизации я просто брал значение из браузера, но оно не подходит для следующих авторизаций. И ещё иногда выкидывает из аккаунта (из-за бездействия или из-за времени жизни сессии, я предполагаю).
Откуда вообще берется значение ModdleSession? Может я конечно не так понял, как это всё работает. Если кому не сложно, объясните пожалуйста.

s = requests.Session()
    url = 'https://edu.susu.ru/login/index.php'
    r = s.get(url)

    soup = BeautifulSoup(r.text, 'html.parser')
    token = soup.find('input', dict(name='logintoken'))['value']

    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q = 0.8,application/signed-exchange;v=b3;q=0.9',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'ru,en;q = 0.9',
        'Cache-Control': 'max-age=0',
        'Connection': 'keep-alive',
        'Content-Length': '82',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Cookie': '_ym_uid=1566661886943408058; _ga=GA1.2.1158346338.1567506425; top100_id = t1.-1.894442075.1581325690213; _ym_d=1582540576; MoodleSession=m8g8sjd34q8grvitlkc0o95eh1',
        'Host': 'edu.susu.ru',
        'Origin': 'https://edu.susu.ru',
        'Referer': 'https://edu.susu.ru/',
        'Sec-Fetch-Dest': 'document',
        'Sec-Fetch-Mode': 'navigate',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-User': '?1',
        'Upgrade - Insecure - Requests': '1',
        'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 YaBrowser/20.3.1.195 Yowser/2.5 Safari/537.36'
    }

    headersGET = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q = 0.8,application/signed-exchange;v=b3;q=0.9',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'ru,en;q = 0.9',
        'Cache-Control': 'max-age = 0',
        'Connection': 'keep-alive',
        'Cookie': '_ym_uid=1566661886943408058; _ga=GA1.2.1158346338.1567506425; top100_id=t1.-1.894442075.1581325690213; _ym_d=1582540576; MoodleSession=mn7iirnibbhndi1ppfninich9o',
        'Host': 'edu.susu.ru',
        'Referer': 'https://edu.susu.ru/',
        'Sec-Fetch-Dest': 'document',
        'Sec-Fetch-Mode': 'navigate',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-User': '?1',
        'Upgrade - Insecure - Requests': '1',
        'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 YaBrowser/20.3.1.195 Yowser/2.5 Safari/537.36'
    }

    data = {
        'username': '***',
        'password': '***',
        'logintoken': token
    }
    d = s.post(url, data=data, headers=headers)
    request = s.get('https://edu.susu.ru/', headers=headersGET)
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@CosmoV
Значение MoodleSession берется из хедеров ответа при первом обращении к ресурсу по адресу /login/index.php
Set-Cookie: MoodleSession=8765f9l60actstg9hlbmvrjgc2; path=/; secure

В тексте страницы также присутствует ответ на случай если в браузере отключены печеньки.

На сайте используется два типа cookies:
  • Основным является сессионный cookie, обычно называемый MoodleSession. Вы должны разрешить использование этого файла cookie в своем браузере, чтобы обеспечить непрерывность и оставаться в системе при просмотре сайта. Когда вы выходите из системы или закрываете браузер, этот файл cookie уничтожается (в вашем браузере и на сервере).

  • Другой файл cookie предназначен исключительно для удобства, его обычно называют MOODLEID или аналогичным. Он просто запоминает ваше имя пользователя в браузере. Это означает, что когда вы возвращаетесь на этот сайт, поле имени пользователя на странице входа в систему уже заполнено для вас. Отказ от этого файла cookie безопасен - вам нужно будет просто вводить свое имя пользователя при каждом входе в систему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы