Авторизация на сайте c помощью requests
Попытался написать авторизацию на сайте с помощью py requests. Вручную авторизуюсь на сайте и все норм. Через программу не хочет авторизовываться и на сайте выскакивает ошибка 1020 “Access Denied”.
url = "https://informatics.msk.ru/login/index.php"
session = requests.Session()
r = session.get(url, headers=user_agent_val)
post_request = session.post(url, {
'username': LOGIN,
'password': PASSWORD,
})
Ответы (1 шт):
Автор решения: Стас
→ Ссылка
Проблема в том, что при авторизации необходимо передавать значение logintoken
. Его можно найти в коде страницы https://informatics.msk.ru/login/index.php
внутри формы авторизации:
<form class="mt-3" action="https://informatics.msk.ru/login/index.php" method="post" id="login">
...
<input type="hidden" name="logintoken" value="lwUiTJJAm0rj9qlOwChK5zBH5sadhbT2">
...
Вот примерный код, который может это сделать:
import requests
from lxml import html # pip install lxml
session = requests.Session()
session.headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"}
loginPageResp = session.get("https://informatics.msk.ru/login/index.php", stream=True)
loginPageResp.raise_for_status()
loginPageResp.raw.decode_content = True
parser = html.parse(loginPageResp.raw)
loginToken = parser.xpath("//form[@class='mt-3' and @id='login']/input[@name='logintoken']/@value")
if not loginToken: raise ValueError("Field 'logintoken' was not found")
loginTokenVal = loginToken[0] #select first of search results
loginResp = session.post(
"https://informatics.msk.ru/login/index.php",
json = {
"logintoken" : loginTokenVal,
"username" : "LOGIN",
"password" : "PASSWORD"
}
)